【发布时间】:2020-07-07 12:02:41
【问题描述】:
Net core 和 NUnit 测试用例。我的控制器如下。
public class MyController : ControllerBase
{
public MyController(ILogger<MyController > logger)
{
this.Logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
private readonly ILogger<MyController > Logger;
public async Task<ActionResult> GetList()
{
this.Logger.LogInformation($"MyList: Some results came");
}
}
然后在我的单元测试用例下面。
public class MyControllerTests
{
private Mock<ILogger<MyController>> Logger = new Mock<ILogger<MyController>>();
internal MyController myController;
public MyControllerTests()
{
this.myController= new MyController(this.Logger.Object);
}
[Test]
public async Task ListTest()
{
Logger.Verify(
x => x.Log(
LogLevel.Information,
It.IsAny<EventId>(),
It.Is<It.IsAnyType>((o, t) => string.Equals("MyList: Some results came", o.ToString(), StringComparison.InvariantCultureIgnoreCase)),
It.IsAny<Exception>(),
(Func<It.IsAnyType, Exception, string>)It.IsAny<object>()),
//rest of the code but i am getting error in above line
}
}
以上代码报错
Moq.MockException : ILogger.Log(LogLevel.Information, 0, ListTest : 成功获取结果, null, Func
) 调用失败,模拟行为 Strict。 模拟上的所有调用都必须有相应的设置。
谁能帮我解决这个问题。任何帮助将不胜感激。谢谢
【问题讨论】:
-
试试
new Mock<ILogger<MyController>>(MockBehavior.Loose); -
你要测试哪个逻辑?除了记录器验证之外什么都没有
-
正如错误消息所说,您需要在模拟对象上设置方法调用,然后才能验证它们。此外,测试代码没有任何调用 Logger 中任何方法的内容。
标签: c# asp.net-core nunit ilogger