[C#] Moq에서 메소드가 호출되지 않았는지 확인하는 방법은 무엇입니까?
Moq 에서 메소드가 호출되지 않았 는지 어떻게 확인 합니까?
AssertWasNotCalled와 같은 것이 있습니까?
업데이트 : 버전 3.0부터 새로운 구문을 사용할 수 있습니다.
mock.Verify(foo => foo.Execute("ping"), Times.Never());
답변
업데이트 : 버전 3부터는 위의 질문 또는 Dann의 답변에 대한 업데이트를 확인하십시오.
예상하지 않은 메소드를 호출하면 모의을 엄격하게하여 실패하지 않습니다.
new Mock<IMoq>(MockBehavior.Strict)
또는 모의를 풀고 싶다면 .Throws (Exception)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
답변
Times.Never
enum 세트 가있는 테스트 후 확인을 실행하십시오 . 예 :
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
답변
도난 : 질문에 대한 John Foster의 답변, “Moq를 더 잘 이해하는 데 도움이 필요합니다”
테스트 할 수있는 것 중 하나는 65 세 이상이 메소드에 전달 될 때 pay 메소드가 호출되지 않는다는 것입니다
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock<IPensionService>(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never()); }
답변
최근 버전의 Moq (최소 3.1부터) 에서는 작동하지 않으므로
Verify
답변에 언급 된 방법으로 지정해야합니다 .
실제로 .AtMost(0)
는 Returns 문 뒤에 지정하는 것이 좋습니다 .
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
“throws”도 작동하지만 AtMost(0)
보다 표현적인 IMHO입니다.
답변
.AtMostOnce ()를 사용하십시오.
실제 테스트 후 메소드를 다시 호출하십시오. 예외가 발생하면 호출됩니다.