1

所以我有一个使用接口的错误处理类:

public interface IEventLogger
  {
    void WriteError(Exception ex, string message);
  }

所以我用最小起订量来模拟这个进行单元测试。此方法通常只会将错误记录到事件查看器中,但对于我的单元测试,我希望它重新抛出传递给方法的异常,即如果将错误传递给这个模拟类,我希望单元测试失败。任何想法我怎么能做到这一点?

我做到了这一点:

 var moqIEventLogger = new Mock<IEventLogger>();
 moqIEventLogger.Setup(s => s.WriteError(It.IsAny<Exception>(), 
                                           It.IsAny<string>()));

但是我不确定如何访问原始异常,如果可能的话?

4

2 回答 2

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; });
于 2013-06-18T11:15:46.523 回答
-1

在你的设置中添加这个(修改)

    moqIEventLogger.Setup(s => s.WriteError(It.IsAny<Exception>(), 
                                       It.IsAny<string>()))
                  .Callback<Exception ex, string s>(p =>
                  {
                         throw ex;
                  });

假设你使用方法 MyMethod 的 hv 类 ClassA 你调用 WriteError 方法你的 Assert 应该如下所示:

 Assert.Throws<Exception>(ClassA.MyMethod );
于 2013-06-18T11:18:19.897 回答