所以我有一个使用该接口的错误处理类:
public interface IEventLogger
{
void WriteError(Exception ex, string message);
}
所以我用Moq来进行单元测试。这种方法通常只是将错误记录到事件查看器中,但对于我的单元测试,我希望它重新抛出传递给方法的异常,即如果错误传递给这个模拟类,我希望单元测试失败。我有什么想法可以做到这一点吗?
我到目前为止:
var moqIEventLogger = new Mock<IEventLogger>();
moqIEventLogger.Setup(s => s.WriteError(It.IsAny<Exception>(),
It.IsAny<string>()));
但我不确定如何访问原始异常,如果可能的话?
答案 0 :(得分:4)
如果您希望它只失败,请使用Throws
方法,如:
moqIEventLogger
.Setup(s => s.WriteError(It.IsAny<Exception>(),It.IsAny<string>()))
.Throws<InvalidOperationException>();
如果你想让它作为参数异常抛出,请尝试:
moqIEventLogger
.Setup(s => s.WriteError(It.IsAny<Exception>(),It.IsAny<string>()))
.Callback((Exception ex, string s) => { throw ex; });
答案 1 :(得分:-1)
在你的设置中添加(修改)
moqIEventLogger.Setup(s => s.WriteError(It.IsAny<Exception>(),
It.IsAny<string>()))
.Callback<Exception ex, string s>(p =>
{
throw ex;
});
假设您使用MyMethod方法调用ClassA,其中您调用WriteError方法您的Assert应如下所示:
Assert.Throws<Exception>(ClassA.MyMethod );