ExpectedException xunit .net核心

Tim*_*hko 30 unit-testing xunit xunit.net .net-core asp.net-core

我正在为核心应用程序编写单元测试.我试图检查,我的班级抛出异常.但是ExpectedException属性会抛出编译异常:

错误CS0246找不到类型或命名空间名称'ExpectedException'(您是否缺少using指令或程序集引用?)EventMessagesBroker.Logic.UnitTests..NETCoreApp,Version = v1.0

我的代码:

[Fact]
[ExpectedException(typeof(MessageTypeParserException))]
public void TestMethod1_Error_twoMathces()
{
    var message = "some text";
    var parser = new MessageTypeParser();
    var type = parser.GetType(message);
    Assert.Equal(MessageType.RaschetStavkiZaNalichnye, type);
}
Run Code Online (Sandbox Code Playgroud)

那么,有没有正确的方法来实现这一目标?

Dmi*_*try 47

Assert.Throws在预期异常的代码上使用:

[Fact]
public void TestMethod1_Error_twoMathces()
{
    var message = "some text";
    var parser = new MessageTypeParser();
    Assert.Throws<MessageTypeParserException>(() => parser.GetType(message));
}
Run Code Online (Sandbox Code Playgroud)

  • 只是为了记录,xunit 不支持 ExpectedException 并支持答案中显示的方式。如此处更详细所述:https://xunit.github.io/docs/comparisons.html 如果您想遵循 Triple A 语法进行单元测试,那么您可以将 parser.GetType(message) 分配给 Action 并断言您的操作引发异常。 (2认同)
  • 我们也可以使用`Record.Exception` 方法,稍后使用`Assert.NotNull` 方法和`Assert.IsType&lt;&gt;` 方法进行验证。见 https://www.richard-banks.org/2015/07/stop-using-assertthrows-in-your-bdd.html (2认同)