【发布时间】:2020-05-29 17:02:23
【问题描述】:
我正在测试一个端点。我需要弄清楚如何使用我的 loggerMock 让测试通过。以下是我目前设置测试的方式:
public void GetExceptionReportSessionData_Returns200OK()
{
//Arrange
var response = new RetrieveExceptionReportSessionDatesResponse
{
RetrieveExceptionReportSessionDatesResult = string.Empty
};
var serviceClient = new Mock<WorkflowService.WorkflowService>();
serviceClient
.Setup(x => x.RetrieveExceptionReportSessionDatesAsync(It.IsAny<RetrieveExceptionReportSessionDatesRequest>()))
.ReturnsAsync(response);
var loggerMock = new Mock<ILogger>();
loggerMock.Setup(x => x.LogInfo(null));
var controller = new ExceptionReportController(loggerMock.Object);
var ctx = new ControllerContext() { HttpContext = new DefaultHttpContext() };
ctx.HttpContext.Request.Headers["token"] = "fake_token_here"; //Set header
controller.ControllerContext = ctx;
//Act
var result = controller.GetExceptionReportSessionData();
//Assert
var viewResult = Assert.IsType<OkObjectResult>(result);
Assert.Equal(StatusCodes.Status200OK, viewResult.StatusCode);
}
这是在返回 200 时在端点中设置记录器的方式:
if (result != null && result.ExceptionReportLines != null && result.ExceptionReportLines.Count > 0)
{
logText = LogFormatter.Format(
WebUtilities.GetUser((ClaimsIdentity)HttpContext.User.Identity),
startTime, DateTime.Now, Privilege.ViewOrderExceptionReport,
"Get Exception Report", "Exception Report retrieved successfully.");
logger.LogInfo(logText);
}
else
{
logText = LogFormatter.Format
(WebUtilities.GetUser((ClaimsIdentity)HttpContext.User.Identity),
startTime, DateTime.Now, Privilege.ViewOrderExceptionReport,
"Get Exception Report", "Exception report is empty for the given report filters.");
logger.LogWarn(logText);
}
return Ok(result);
我的测试已设置为显示后一条消息。我怎样才能让测试通过?
【问题讨论】:
-
出于好奇,LogInfo 和 LogWarn 是从哪里来的?它们不是 MS 扩展...
标签: c# unit-testing asp.net-core moq xunit