테스트 할 메서드 내에서 서비스 호출을 모의하려고합니다.Moq 메서드를 사용한 단위 테스트가 Task.Run 내부에서 호출되었습니다.
는 메소드 본문은 다음과 같습니다
public string OnActionException(HttpActionContext httpRequest, Exception ex)
{
var formattedActionException = ActionLevelExceptionManager.GetActionExceptionMessage(httpRequest);
var mainErrorMessage = $"[{formattedActionException.ErrorId}]{formattedActionException.ErrorMessage}, {ex.Message}";
this.LogError(mainErrorMessage, ex);
if (this._configuration.MailSupportOnException)
Task.Run(async() => await this._mailService.SendEmailForThrownException(this._configuration.SupportEmail, $"{mainErrorMessage} ---> Stack trace: {ex.StackTrace.ToString()}"));
return $"(ErrID:{formattedActionException.ErrorId}) {formattedActionException.ErrorMessage} {formattedActionException.KindMessage}";
}
내가 내 테스트 내부 조롱하려고하는 것은 :
이Task.Run (비동기() =이> 기다리고 this._mailService.SendEmailForThrownException (this._configuration.SupportEmail, $ "{mainErrorMessage} ---> 스택 추적 : {ex.StackTrace.ToString()}"));
시험 방법은 다음과 같습니다
[TestMethod]
public void We_Send_System_Exception_On_Email_If_Configured_In_Settings()
{
// arrange
this._configurationWrapperMock.Setup(cwm => cwm.MailSupportOnException)
.Returns(true);
this._mailServiceMock.Setup(msm => msm.SendEmailForThrownException(It.IsAny<string>(), It.IsAny<string>()))
.Returns(Task.FromResult(0));
// act
var logger = new ApiLogger(this._configurationWrapperMock.Object, this._mailServiceMock.Object);
logger.OnActionException(
new HttpActionContext(
new HttpControllerContext()
{
Request = new HttpRequestMessage()
{
Method = HttpMethod.Get,
RequestUri = new System.Uri("https://www.google.bg/")
}
},
new ReflectedHttpActionDescriptor() { }
),
new System.Exception());
// assert
this._mailServiceMock.Verify(
msm => msm.SendEmailForThrownException(It.IsAny<string>(), It.IsAny<string>()),
Times.Once);
}
문제는 내 어설 션이 실패 할 수 있도록 방법은 호출되지 않습니다 것입니다.
편집 : 내 질문을 변경할 수 있습니다. 어떻게 내 테스트 할 수 있도록 내 메서드를 다시 작성해야합니까?
코드가 예상 경로를 통과하는지 테스트 디버깅을 시도 했습니까? –
작업이 실행 중입니다. 다른 스레드에서 실행 중이므로 확인할 수 없습니다. – Nkosi
@KerriBrown이 줄을 살펴 보았지만 디버깅을했지만 Moq가이를 감지하지 못했습니다. Moq은 결코 호출되지 않는다고 말했습니다. – user2128702