Moq重新抛出错误传入安装程序

本文关键字:安装 程序 错误 新抛出 Moq | 更新日期: 2023-09-27 18:18:48

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

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

所以我用Moq模拟这个单元测试。这个方法通常只是将错误记录到事件查看器中,但对于我的单元测试,我希望它重新抛出传入方法的异常,也就是说,如果错误传入这个模拟类,我希望单元测试失败。知道怎么做吗?

I got this far:

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

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

Moq重新抛出错误传入安装程序

如果您希望它只失败,那么使用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; });

将此添加到您的setup (modified)

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

假设你有一个ClassA类和MyMethod方法,你调用WriteError方法,你的Assert应该是这样的:

 Assert.Throws<Exception>(ClassA.MyMethod );