2012-12-22 1 views
0

매우 간단한 인터페이스에서 단위 테스트를하려고합니다. 내 인터페이스는 다음과 같습니다moq- 기본 매개 변수로 함수를 실행할 수없는 이유는 무엇입니까?

public interface Interface1 
    { 
     string retStr(string dd); 
     string retStr2(string dd,string fff); 
    } 

이이 모의 :

var myMoq = new Mock<Interface1>(); 

myMoq.Setup(d => d.retStr("David")).Returns("retStr"); 
Console.WriteLine(myMoq.Object.retStr("fdf").ToString()); 
I GOT runtime error: Object reference not set to an instance of an object. 

및 구현에 다른 오류 : 왜

myMoq.Setup(d => d.retStr2(It.Is<string>(e=>e=="qqq"), It.IsAny<string>())).Returns("2 parameters"); 
Console.WriteLine(myMoq.Object.retStr2("fdf","wewew").ToString()); 

입니까?

+0

하나의 질문 : 저는 Interface1을 조롱하고 있다고 가정합니다. t는 의존성이며 실제로 테스트하는 대상은 다른 것입니까? 그렇지 않다면 모의 테스트를 할 필요가 없습니다. Mock은 실제 구현을 테스트하는 것을 보완합니다. –

답변

3

설치시 특정 문자열이 전달 될 것으로 예상하는지 설정합니다 (예 : "David").

"David"문자열로 메소드를 호출하면 Moq에 "retStrr"을 전달하고 그렇지 않으면 string (null)에 대해 기본값을 반환합니다. 결과적으로 .ToString()을 수행하면 이 방법의 개체가 null입니다.

같은 일이 두 번째 예제에 적용됩니다.

예상대로 수행 It.IsAny<string>()하는 방법을 설정할 때. 또는를 사용하여,보다 일반적인 반환 값을 확인하기 위해 테스트에서 "David"이라고 말하면됩니다.

관련 문제