내가 (코뿔소와 NUNIT 사용) 테스트에서 예외를 throw하려고 던지는 아니지만,코뿔소 모의 객체는 예외
인터페이스
public interface IEmailService
{
void SendEmail(string to, string subject, string body);
}
public interface IWebService
{
void LogError(string message);
}
클래스
public class MockService : IWebService
{
public string LastError;
public void LogError(string message)
{
LastError = message;
}
}
public class LogAnalyzerDynamicMockWithEmail
{
public IWebService Service { get; set; }
public IEmailService Email { get; set; }
public void Analyze(string fileName)
{
try
{
if (fileName.Length < 8)
Service.LogError("Filename too short:" + fileName);
}
catch (Exception exception)
{
Email.SendEmail("a", "subject", exception.Message);
}
}
}
을 예상대로 작동하지 않습니다
이 시험 방법
[Test]
public void Analyze_WebServiceThrows_SendsEmail()
{
var mockRepository = new MockRepository();
var stubWebService = mockRepository.Stub<IWebService>();
var mockEmailService = mockRepository.StrictMock<IEmailService>();
var logAnalyzerDynamicMockWithEmail = new LogAnalyzerDynamicMockWithEmail
{
Service = stubWebService,
Email = mockEmailService
};
stubWebService.Stub(m => m.LogError("whatever")).IgnoreArguments().Throw(new Exception("fake exception"));
Assert.Throws<Exception>(() => { logAnalyzerDynamicMockWithEmail.Analyze("abc.ext"); });
mockEmailService.AssertWasCalled(m => m.SendEmail("a", "subject", "fake exception"));
}
이다
그러나 테스트가 실패하고 메시지가 "Expected: <system.exception>, but was: null
"
내가 여기에 무엇을 놓치고 지적 할 수 누군가?