2017-01-31 2 views
1

Moq에서 Microsoft Visual Studio 2017의 내장 테스트를 사용합니다.Moq를 사용하여 메서드가 값과 함께 호출되었는지 확인

나는 약간 내용을 생성하는 간단한 종류가 있고 그 때 내용을 통지 시스템에 보낸다. 통지 시스템이 호출되었는지 테스트해야하지만 호출에 텍스트가 포함되어 있어야합니다.

public void DoStuff() 
      var tenantSettings = _tenantService.GetTenantSettings(); 
      tenantSettings.Body = "xxx SOME VALUE xxx"; 
      MyService.SendMail(tenantSettings.Body); 

SendMail에 "SOME VALUE"텍스트가 있는지 테스트 할 수 있습니까? 당신은 단순히 당신의 모의에 Verify 방법을 사용할 수 있습니다

MyServiceMock.Setup(x=>x.SendMail(It.IsAny<string>); 

답변

5

:

은 내가 MOCK 설정을 가지고

MyServiceMock.Verify(x => x.SendMail("SOME VALUE"), Times.Once()); 

편집 :

당신이 텍스트로 전달 여부를 확인하려면 매개 변수가 정확히 일치하지 않지만 테스트 된 값만 포함하면 Scott Chamberlain에 다음과 같이 쓸 수 있습니다.

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once()); 
+0

전달 된 문자열이이 코드와 일치하지 않는 "xxx SOME VALUE xxx"인 경우에만 정확한 값 인 "SOME VALUE"와 일치합니다. –

+0

사실, 나는 편집을 보지 못했고, 원래의 질문은 달랐다. – tdragon

1

It.Is<TValue>(Func<TValue,bool>) 함수와 함께 Verify 함수를 사용하여 하위 문자열을 검색해야합니다.

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once()); 

DoStuff()이 호출 된 후 테스트 기능이 끝날 때이 줄을 넣습니다.

관련 문제