我是TDD的新手,并且正在与Nunit和Moq一起使用。我有一种我希望有例外的方法,所以我想使用Frameworks功能进行一些播放。

我的测试代码如下:

    [Test]
    [ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
    public void Write_MessageLogWithCategoryInfoFail()
    {
        string message = "Info Test Message";

        Write_MessageLogWithCategory(message, "Info");

        _LogTest.Verify(writeMessage =>
            writeMessage.Info("This should fail"),
            "Actual differs from expected"
        );
    }

但是我总是收到错误消息,即实际异常消息与预期消息不同。我究竟做错了什么?

有帮助吗?

解决方案

不幸的是,Resharper测试跑者具有错误/限制 - 它无法处理ExpectionException属性。您有2个选项:

  1. 使用其他一些测试跑者(例如Nunit -gui.exe,用Nunit运送) - 但是这种方法使调试测试的痛苦很痛苦

  2. 使用以下模式手动捕获和验证异常:

    test] public void write_messagelogwithcategoryinfofail(){尝试{字符串消息=“ info test message”;

      Write_MessageLogWithCategory(message, "Info");
    
      _LogTest.Verify(writeMessage =>
          writeMessage.Info("This should fail"),
          "Actual differs from expected"
      );
      Assert.Fail("Expected exception");
    }
    catch(MockException e)
    {
      Assert.AreEqual("Actual differs from expected", e.Message);
    }
    

    }

这是一个真正的耻辱,因为说明您期望例外的描述方式要好得多!

附带说明我希望上面的代码仅用于使用该框架 - 通常您永远不会抓住mockexceptions :)

其他提示

您可以使用额外的参数 MatchType = MessageMatch.Regex.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top