4

我对 TDD 很陌生,并且正在使用 NUnit 和 Moq。我有一个方法,我预计会出现异常,所以我想尝试一下框架功能。

我的测试代码如下所示:

    [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"
        );
    }

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

4

2 回答 2

3

不幸的是,Resharper 测试运行器有一个错误/限制 - 它不处理 ExpectedException 属性。您有 2 个选项:

  1. 使用其他一些测试运行程序(例如 nunit-gui.exe,与 NUnit 一起提供)——但这种方法使调试测试变得很痛苦

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

    [测试] public void Write_MessageLogWithCategoryInfoFail() { try { string message = "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 :)

于 2010-06-09T14:43:05.087 回答
2

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

于 2012-07-15T18:41:31.253 回答