【问题标题】:Replacement for MatchType?替换匹配类型?
【发布时间】:2017-06-23 09:38:38
【问题描述】:

新的 NUnit 版本 3.x 不再支持ExpectedExceptionAttribute。取而代之的是Assert.Throws<MyException>()。可能是一个更好的逻辑概念。但我没有找到任何替代旧好的MatchType - 有吗? MyException 可以抛出多个参数,在 NUnit 2.x 中,我可以比较包含某个文本片段的异常消息,以了解使用了哪个参数(当然,我不会有几十个异常类而不是逻辑类)。 NUnit 3.x 如何处理这个问题?我找不到提示。

使用 NUnit 2.x,我将执行以下操作:

[Test]
[ExpectedException(ExpectedException=typeof(MyException),  ExpectedMessage="NON_EXISTENT_KEY", MatchType=MessageMatch.Contains)]
public void DeletePatient_PatientExists_Succeeds()
 {
    Person p    = new Person("P12345", "Testmann^Theo", new DateTime(1960, 11, 5), Gender.Male);
    MyDatabase.Insert(p);

    MyDatabase.Delete(p.Key);

    // Attemp to select from a database with a non-existent key.
    // MyDatabase throws an exception of type MyException with "NON_EXISTENT_KEY" within the message string,
    // so that I can distinguish it from cases where MyException is thrown with different message strings.
    Person p1   = MyDatabase.Select(p.Key);
 }

如何使用 NUnt 3.x 做类似的事情?

请考虑我的意思:NUnit 提供的方法不足以识别引发异常的参数,所以这是一个不同的问题。

【问题讨论】:

标签: c# nunit-3.0 expected-exception


【解决方案1】:
var ex = Assert.Throws<MyException>(()=> MyDatabase.Select(p.Key));
StringAssert.Contains("NON_EXISTENT_KEY", ex.Message);

【讨论】:

  • 我不明白你的意思。
  • Assert.Throws 检查抛出的预期类型的​​异常,并返回异常的实例。在下一行 StringAssert 检查中,如果预期的字符串包含在 Exception.Message 中。与您在 FluentAssertions 的评论中的结果完全相同,但所有内容均来自 NUnit 3。
  • 好的,我可能误解了 StringAssert。
  • 更多关于 NUnit 3 中 StringAssert 的信息:github.com/nunit/docs/wiki/String-Assert
  • 就我而言,Google 将我发送到这里,我不知道 MatchType 做了什么(更新旧代码)。很高兴得到一个连接MatchTypeStringAssert.Contains的解释。
【解决方案2】:

看起来,确实存在提供此功能的可能性(甚至比上述更清晰),尽管不是在 NUnit 3 本身中,而是在 FluentAssertions (http://www.fluentassertions.com/) 中。在那里,你可以做类似的事情

 Action act = () => MyDatabase.Select(p.Key);
 act.ShouldThrow<MyException>().Where(ex => ex.Message.Contains("NON_EXISTENT_KEY"));

出于我所有的实际目的,这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 2020-07-28
    • 1970-01-01
    • 2021-05-28
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多