2009-04-07 2 views
1

현재 MVP 모델에있는 발표자를 테스트하는 테스트가 있습니다. 제 발표자에게는 제 견해가 조롱받는 제 견해로 전화 할 재산이 있습니다. 내 테스트 초기화에서 발표자의 내 View를 조롱 된보기로 설정 한 후에이 메서드를 호출하는 Presenter에서 내 속성을 설정합니다.) IView.MethodToInvoke (; 내 테스트에서Rhino Mock을 사용하는 이유는 테스트 초기화 동안 속성에서 조롱 된 호출이 예상 호출 # 1, 실제 호출 # 0을 반환하는 이유는 무엇입니까?

나는 호출하는 방법에 대한 Expect.Call이없는, 아직 내가 실행할 때 나는이 코뿔소 모의 예외를 얻을 :

Rhino.Mocks.Exceptions.ExpectationViolationException을 예상 # 1, 실제 # 0 ..

내가 예상하는 블록 밖에서 모의를 호출하는 한 Rhino 모의가 이해하는대로 녹음하지 않아야합니다. 시험 합격을 상상할 것입니다. 지나 가지 않는 이유가 있습니까?

다음은 설정을 보여주는 몇 가지 코드입니다.

public class Presenter 
{ 
    public IView View; 

    public Presenter(IView view) 
    { 
     View = view 
    } 
    private int _property; 
    public int Property 
    get { return _property;} 
    set 
    { 
     _property = value; 

     View.MethodToInvoke(); 
    } 
} 

... 다음은 테스트 코드 ...

[TestInitialize] 
     public void Initilize() 
     { 
      _mocks = new MockRepository(); 
      _view = _mocks.StrictMock<IView>(); 
      _presenter = new Presenter(_view); 
      _presenter.Property = 1;    
     } 
[TestMethod] 
     public void Test() 
     { 
      Rhino.Mocks.With.Mocks(_mocks).Expecting(delegate 
      {     
      }).Verify(delegate 
      { 
       _presenter.SomeOtherMethod(); 
}); 
     } 

답변

1

테스트를 실행할 때마다 왜 똑같은 것을 테스트하고 싶습니까?

특정 일이 발생했는지 테스트하려는 경우 단일 테스트에서이를 검사해야합니다.

당신이 지금 사용하고있는 패턴은 할 필요가 있음을 의미한다 - 시험 을위한 전제 조건을 설정 - 행동 을 - 그 행동이 올바른 입니다 확인하고

당신은 필요 하나 개의 테스트에서 그 여러 번 반복 각 테스트마다 한 가지 테스트를 시작하면 테스트가 명확 해지며 AAA 구문을 더 쉽게 사용할 수 있습니다.

가 여기서 논의하기 위해 몇 가지, 그러나 당신이 뭔가를 좋아했다 경우 확실히 명확하게 될 것이다 : 여기에 3.5 구문 코뿔소 모의 객체에 대한 자세한 읽기 최대

[TestMethod] 
ShouldCallInvokedMethodWhenSettingProperty() 
{ 
    var viewMock = MockRepository.GenerateMock<IView>() 

    var presenter = new Presenter(viewMock); 

    presenter.Property = 1; 

    viewMock.AssertWasCalled(view => view.InvokedMethod()); 

} 

: http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx

0
    당신이 시험 방법에서 테스트하려고 정확히 무엇
  1. ?
  2. 엄격한 모의를 사용하지 않는 것이 좋습니다.
  3. Rhino's AAA syntax (Arrange, Act, Assert)을 사용하는 것이 좋습니다.
0

문제는 저를 거짓말로 기록을 이해하지 못했거나 Strict mock으로 진행되고 있는지 확인합니다. 이 문제를 해결하기 위해 필자는 TestInitilize 함수를 어떻게 변경했는지를 설명합니다. 이 기본은 모든 내 테스트를 준비하고있는 초기 상태에 대한 빠른 테스트를 수행합니다.

[TestInitialize] 
    public void Initilize() 
    { 
     _mocks = new MockRepository(); 
     _view = _mocks.StrictMock<IView>(); 
     _presenter = new Presenter(_view); 

     Expect.Call(delegate { _presenter.View.InvokedMethod(); }); 
     _mocks.ReplayAll(); 
     _mocks.VerifyAll(); 
     _mocks.BackToRecordAll(); 
     _presenter.Property = 1; 
    } 
+0

다시 말하지만, 당신은 확신 엄격한 조롱이 필요해? 당신의 시나리오는 당신이 모든 기대치를 지정하도록 강요하지 않는 평범한 모의를 사용하는 것과 비슷합니다. AAA를 사용하는 경우 코드를 작성하는 것이 훨씬 간단합니다. –

관련 문제