C# 如何模拟输入为异常的函数?
我正在用.netcore C#编写一个函数的单元测试。在该函数中,我需要为mock对象设置一个函数。此函数的have input是一个例外。我尝试下面的解决方案,它可以编译,但在运行时失败。请帮忙 需要测试功能:C# 如何模拟输入为异常的函数?,c#,unit-testing,exception,.net-core,mocking,C#,Unit Testing,Exception,.net Core,Mocking,我正在用.netcore C#编写一个函数的单元测试。在该函数中,我需要为mock对象设置一个函数。此函数的have input是一个例外。我尝试下面的解决方案,它可以编译,但在运行时失败。请帮忙 需要测试功能: public void MyFunction() { ... try { ... } catch (Exception ex) {
public void MyFunction()
{
...
try
{
...
}
catch (Exception ex)
{
_logger.LogError(ex, "...");
...
}
}
在单元测试中,我按照以下方式进行设置:
_loggerMock.Setup(l => l.LogError(It.IsAny<Exception>(), It.IsAny<string>(), null));
\u loggerlock.Setup(l=>l.LogError(It.IsAny(),It.IsAny(),null));
运行UT时出错:
System.NotSupportedException:'不支持的表达式:l=>l.LogError(It.IsAny(),It.IsAny(),new[]{})
在设置/验证表达式中不能使用扩展方法(此处:LoggerExtensions.LogError)。'
我遵循了Simple Ged评论中的指导原则。现在它可以工作了 代码如下:
_loggerMock.Setup(x => x.Log(LogLevel.Error, It.IsAny<EventId>(), It.IsAny<object>(), It.IsAny<Exception>(), It.IsAny<Func<object, Exception, string>>()));
\u loggerlock.Setup(x=>x.Log(LogLevel.Error,It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny());
LogError
是一种扩展方法。您需要模拟ILogger
界面上的Log(…)
方法。我也尝试过这个方法,但不适用于我。我通过调试确认,测试中的代码多次调用了logger.LogError(例如,“错误消息”)
,但如果我尝试验证调用次数,它会告诉我根本没有调用它。。。调用.Verify():loggerlock.Verify(x=>x.Log(LogLevel.Error,It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny()),Times.atleastone)代码>