2009-01-08 6 views
1

그래서 저는 rhino mock을 처음 사용하고 있습니다. 그래서 저는이 프로젝트를 MVP 프로젝트에 적용하려고합니다. 그래서 난 내보기 등처럼 내 발표자에 대한 클래스 나타내는 인터페이스를 가지고 :초급 Rhino 모의 문제

public interface IView { 
    string SomeData { get; set; } 
} 

public class Presenter { 
    public IView View { get; set; } 
    public void Init(IView view) { 
    this.View = view; 
    } 

    public virtual string DoStuff(){ 
    return "Done stuff with " + this.View.SomeData; 
    } 
} 

그리고 나는 DoStuff 방법을 모의 테스트를 설정하기 위해 노력하고있어를, 그래서 기본적인 고정있어 이 같은 :

[TestMethod] 
public void Test(){ 
    var mocks = new MockRepository(); 
    var view = mocks.Stub<IView>(); 
    var presenter = mocks.StrictMock<Presenter>(); 

    presenter.Init(view); 

    using(mocks.Record()){ 
    presenter.Expect(p => p.DoStuff()).Return("Mocked result"); 
    } 

    string result = string.Empty; 
    using(mocks.Playback()){ 
    result = presenter.DoStuff(); 
    } 

    Assert.AreEqual(result, "Mocked result"); 
} 

그러나보기 오브젝트가 null 때문에 나는, (기대 설정시)를 DoStuff 방법 내에서 null 참조 예외가 계속. 그리고 이것은 내가 붙어있는 곳입니다. Init 메서드를 호출했습니다.이 메서드는 View 속성의 값을 할당하며 예상 설정의 요점은 메서드 자체가 호출되지 않았다고 생각했습니다.

답변

2

조롱 한 발표자에서 Init 메서드를 호출하는 대신 View 속성도 조롱해야합니다.

presenter.Expect(p => p.View).Return(view); 

는 또한 RhinoMocks에 대한 새로운 AAA (배열 - 법 - 어설) 구문을 사용하여보고 할 수 있습니다.

string expectedResult = "Done stuff with Mocked Result"; 

var view = MockRepository.GenerateMock<IView>(); 
view.Expect(v => v.SomeData).Return("Mocked Result"); 

var presenter = new Presenter(); 
presenter.Init(view); 

string actualResult = presenter.DoStuff(); 

Assert.AreEqual(expectedResult, actualResult); 

view.VerifyAllExpectations(); 

편집 다시보고 후, 나는 당신이 /하지 발표자보기를 아마 단지 모의 스텁한다 @ayende에 동의합니다. 코드를 작동 시키려면 원래의 수정 사항을 그대로 두 겠지만 예제를 업데이트하여 후자를 반영하십시오.

+0

테스트 하시겠습니까? – Gutzofter

+0

그는 View 속성이 호출되고 DoStuff() 메서드도 호출되는지 테스트하고 있습니다.AAA 구문이 어떻게 보이는지 보여주는 데모 코드입니다. – sirrocco

+0

값을 위해 어설 션으로 업데이트하겠습니다 ... – tvanfosson

0

소스 코드와 테스트 결과에서 실제로 테스트하려는 내용을보기가 어렵습니다. 보기? 발표자?

당신이 당신의 뷰를위한 인터페이스와 당신의 발표자를위한 클래스 구현을 가지고 있기 때문에 당신은 뷰를 조롱하고 발표자를 테스트하고 싶다고 생각합니다.

http://groups.google.com/group/RhinoMocks

이 코드를 참조하십시오 : 여기

그룹 사이트 (내가 당신을 위해 그것을이 질문에 대한 링크를 게시)입니다. 그것은 2007 년부터이지만 조롱의 요지를 얻을 수 있습니다. 당신이 코뿔소 모의 객체를 테스트처럼

http://tech.groups.yahoo.com/group/AgileEmbedded/files/HomeGuard/

8

것 같습니다. 보기와 발표자를 조롱하고 있습니다. 나는 발표자를 조롱하는 것이 바람직하지 않다고 생각할 것이다. 당신은 단지 그 시야 만 조롱해야한다.

0

다른 사람이 작성한 것처럼 테스트 할 코드를 결정하고 다른 것들만 조롱해야합니다. 발표자를 테스트하려는 경우 실제 발표자를 사용하면서보기를 조롱하거나 스텁하려는 경우입니다. 다음과 같은 내용 :

[TestMethod] 
public void Test(){ 
    var view = MockRepository.GenerateStub<IView>(); 
    var presenter = new Presenter(); 
    presenter.Init(view); 
    view.SomeData = "Test"; 
    Assert.AreEqual(presenter.DoStuff(), "Done stuff with Test"); 
} 

그런 다음 Presenter.DoStuff() 메서드가 해당보기를 올바르게 사용하는지 테스트하고 있습니다.

희망이 도움이됩니다.

관련 문제