2013-02-15 2 views
1

안녕 나는 MOQ 프레임 워크에 대해 배우려고 노력하고 있어요에 메시지를 반환하지 않습니다하지만 난 간단한 concept.Here 내가 테스트입니다 코드를 이해하지 못하는 것 같다 :MOQ는 NUnit과 콘솔

public interface ILongRunningLibrary { 
    string RunForALongTime(int interval); 
} 

public class LongRunningLibrary : ILongRunningLibrary { 

    public string RunForALongTime(int interval) { 
     var timeToWait = interval * 1000; 
     Thread.Sleep(timeToWait); 

     return string.Format("Waited {0} seconds ", interval); 
    } 
} 

그리고 여기에 있습니다 내 테스트 : 나는 독서하고 책을 이해 것과

private Mock<ILongRunningLibrary> _longRunningLibrary; 

    [SetUp] 
    public void SetupForTest() { 
     _longRunningLibrary = new Mock<ILongRunningLibrary>(); 
    } 

    [Test] 
    public void TestLongRunningLibrary() { 
     const int interval = 30; 
     _longRunningLibrary.Setup(lrl => lrl.RunForALongTime(30)) 
          .Returns("This method has been mocked!"); 
     var result = _longRunningLibrary.Object.RunForALongTime(interval); 
     Debug.WriteLine("Return from method was '{0}'", result); 
    } 

이 방법은 NUnit과 콘솔에 반환해야한다는 것입니다 내 경우에는 시험 패스를 나누었다을 "이 방법은 조롱하고있다"그것은 아무 것도 반환하지 않습니다.

나는 제거하더라도 :

_longRunningLibrary.Setup(lrl => lrl.RunForALongTime(30)) 
          .Returns("This method has been mocked!"); 

테스트는 여전히 통과 콘솔 아무것도에 인쇄되어 있습니다.

"이 방법은 조롱되었습니다"NUnit 콘솔에 반환되지 않는 이유는 무엇입니까?

+0

가능한 복제본 [TestDriven.Net을 사용하는 경우 Debug.WriteLine 문을 어떻게 봅니까?] (https://stackoverflow.com/questions/173641/how-do-i-see-debug-writeline-statements-when) -using-testdriven-net) – nemesv

답변

2

첫 번째 예는 정상적으로 실행됩니다. 테스트 주자가 Debug.WriteLine을 호출하지 못한다고 생각합니다. 나는 그것을 Console.WriteLine으로 바꾸었고 올바른 출력을 얻었다.

두 번째 예제에서 설치 호출을 제거하면 느슨한 동작을 사용하기 때문에 모의 기본값 (null)이 반환됩니다. null 매개 변수로 Debug.WriteLine을 호출하면 예외가 발생하지 않으므로 테스트가 통과합니다.

일반적으로 StrictBehavior를 사용하는 것이 좋습니다.

_longRunningLibrary = new Mock<ILongRunningLibrary>(MockBehavior.Strict); 

RunForALongTime 메서드에 대한 설정이 없으므로 이제 예외가 발생합니다.

0

음 ... 오늘 같은 문제에 직면하고 내가 진짜 원인 찾을 수 있다고 생각 :

그냥 NUnit과의 GUI로 이동 한 후보기 -이>> 텍스트 출력 ...

탭 - 결과를

"Trace Output"이 기본적으로 선택되어 있지 않음을 확인 했으므로 Debug.WriteLine이 제대로 작동하는지 확인하십시오.

그래서 확인할 수도 있고 Console.WriteLine을 사용하고 입니다.