2012-07-09 2 views
11

단위 테스트의 경우 NUnit 2.6 및 Moq 4.0을 사용하고 있습니다. Moq의 프록시 객체가 실제 구현 (아마도 의도적으로) 메소드 호출을 중계하지 않는 가상 멤버에 관한 특별한 경우가 있습니다. I 클래스 ...Moq의 가상 멤버 조롱

public class MyClass { 
    protected virtual void A() { 
     /* ... */ 
    } 

    protected virtual void B(...) { 
     /* ... */ 
    } 
} 

했다 ... 그리고 예를 들어, 만약 내가 사용 ... 내 테스트 픽스처에

var mock = new Mock<MyClass>(); 
mock.Protected().Setup("A").Callback(SomeSortOfCallback); 

GetSomethingElseA() 메소드를 오버라이드 (override) 할 MOQ를 사용 모의의 A 방법은 훌륭하게 작동합니다. 그러나 메서드에서 아무 것도 모호하지 않은 메서드 B을 호출하면 실제 구현이 MyClass에 있더라도이 메서드는 아무 것도 수행하지 않고 기본값을 반환합니다.

이 문제를 해결할 방법이 있습니까? Moq를 잘못 사용하고 있습니까? 사전에

감사합니다,
매니

답변

17

설정 mock.CallBase = true 당신이 갈 수 있어야한다.

+0

다른 방법을 조롱하고 싶은가요? –

+1

@LouisRhys 분명히 이것이 간섭하지 않는다는 것을 확실히 명심하십시오 - 당신이 명시 적으로 뭔가를 모의한다면'CallBase' 설정은 절대로 나오지 않습니다. –

-1
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true }; 
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...); 
var actual=systemUnderTest.Object.BulkInsert(...); 
+3

답변과 함께 코드에 대한 설명을 포함하는 것이 좋습니다. – EJoshuaS

관련 문제