2011-11-25 2 views
2

Rhino Mocks 3.5를 사용하여 다음 클래스에 대한 단위 테스트를 작성하는 데 도움이 필요합니다. 내 수업의 다음 오버라이드 방법 : 나는 Initialize 메서드가 호출 될 때,이 방법은 알림 메서드를 호출하고 유형을 ViewData의 매개 변수가 있음을 검증하는 테스트를 작성되고 싶지코뿔소 모의로 단위 테스트를 작성하는 데 도움이됩니다.

public override void Initialize(params object[] messages) 
    { 
     var data = new ViewData 
     { 
      Name = this.GetName() 
     }; 

     this.Notify(data); 
    } 

. 또한이 메서드 내에서 개인 메서드 인 GetName 메서드가 호출되는지 확인하려고합니다. 접근자를 사용하여 GetName 개인 메서드에 액세스합니다.

테스트를 쓰는 데 새로운 도움이 필요하므로 도움이 필요합니다.

+0

'Notify() '는 어떤 방법을 사용합니까? 'this' 클래스에 주입 한 다른 클래스에 어떻게 접근합니까? – sll

+0

GetName() 및 Notify()의 서명은 무엇입니까? Notify가 ViewData 만 허용하면 매개 변수가 ViewData 유형인지 확인하기 위해 단위 테스트를 작성할 필요가 없습니다. .NET은 컴파일 할 때이를 적용 할 것입니다. – PatrickSteele

답변

3

원하는 것을 partial mock이라고합니다.

[Test] 
public void UsingPartialMocks() 
{ 
    MockRepository mocks = new MockRepository(); 
    YourClass partialMock = mocks.PartialMock<YourClass>(); 
    Expect.Call(partialMock.Notify(null)).IgnoreArguments(); 
    mocks.ReplayAll(); 
    partialMock.Initialize(null); 
    mocks.VerifyAll(); 
} 
+0

도움을 주셔서 감사합니다 Jon하지만 위의 경우 오류가 발생합니다. 잘못된 호출, 마지막 호출이 사용되었거나 호출이 생성되지 않았습니다 (가상 (C#)/오버라이드 (VB) 메서드를 호출하고 있는지 확인하십시오.). notify 메소드는 테스트중인 클래스에는 구현되어 있지 않지만 테스트중인 클래스에 상속 된 기본 클래스에 구현되어 있습니다. 어떤 아이디어가 문제 일 수 있습니까? – amateur

+0

람다 구문을 사용해 볼 수 있습니다 - http://stackoverflow.com/questions/1301116/rhino-mocks-error-invalid-call-the-last-call-has-been-used-or-no-call- has-be –

+0

위의 줄을 Expect.Call (() => partialMock.Notify (null))으로 변경했습니다 .IgnoreArguments(); 그러나 여전히 같은 오류가 발생합니다 - 어떤 아이디어입니까? – amateur

0

직접 코뿔소를 사용하여 작업을 수행하는 방법에 대한 귀하의 질문에 대답 아니지만 내가 수동 조롱을 사용하여 테스트 할 방법을 보여 드리겠습니다 후세를 위해서, (존은 이미에 괜찮은 일을 것으로 보인다) . 이 코드는 이제 Initialize 방법이 실제로 제대로 작동 않음을 확인하고 적절한 매개 변수를 사용하여 Notify을 실행

[Test] 
public void initializeRegistersViewDataWithGivenName() 
{ 
    ShuntedYourClass yourClass = new ShuntedYourClass(); 
    yourClass.initialize(/* arg list */); 

    // Verify 'Notify' was called 
    Assert.NotNull(yourClass.registeredViewData); 

    // Verify 'GetName' private method was invoked and 
    // 'Name' was properly populated 
    Assert.AreEqual("expected name", yourClass.registeredViewData.Name); 
} 

// Nested class for testing purposes only. 
class ShuntedYourClass : public YourClass 
{ 
    public ViewData registeredViewData; 

    public override void Notify(ViewData vd) 
    { 
    this.registeredViewData = vd; 
    } 
} 

(내가 C# .NET을 수행 한 이후 오랜만이야, 나와 함께 부담 때문에 구문 오류를 용서).

희망 하시겠습니까?

브랜든

관련 문제