【问题标题】:Xunit to return a new argumentXunit 返回一个新参数
【发布时间】:2022-01-10 16:04:00
【问题描述】:

我是 Xunit 的新手。我在代码中抛出了一个新异常:

throw new NotImplementedException("Missing UPC. File is corrupt");

在我的测试文件中我写道:

[Fact]
public void ParserRow_Throws_Exception_For_Null_UPC()
{
    var record = GetRessoRecord();
    record.UPC = "";

    RevenueReportItem result = Sut.ParseRow(record);

    Assert.Throws<NotImplementedException>(() => Sut.ParseRow(record));
}

测试资源管理器中的错误消息显示

System.NotImplementedException:缺少 UPC。文件已损坏

如何添加返回的报价?

【问题讨论】:

  • 您调用了两次测试方法。删除断言之外的第一个调用,因为它会抛出异常并停止测试执行。
  • 感谢@CeeMcSharpface。希望你在单独的答案中回答了这个问题,所以我可以证明它解决了这个问题!

标签: c# xunit


【解决方案1】:
  1. Throws&lt;&gt; 的同步变体现已过时。

  2. 您调用了两次测试方法。删除断言之外的第一个调用,因为它会抛出异常并停止测试执行。

  3. Throws&lt;&gt; 的调用返回异常对象,您可以从中检索和检查消息,如下所示:

[Fact]
public async Task ParserRow_Throws_Exception_For_Null_UPC() 
{
    var exceptionDetails = await Assert.ThrowsAsync<NotImplementedException>(() => {
        throw new NotImplementedException("foo");
    });

    Assert.Equal("foo", exceptionDetails.Message);
}

【讨论】:

  • 单元测试运行的时候,碰到了抛出异常的地方,代码就停止了。有什么办法吗?
  • 我认为您的陈述缺少一个重要部分。对于异步代码 (Func>),Throws 被认为是过时的,而不是同步代码!!!
  • 空白解决方案,具有最新 .net 核心和最新 xunit 包的新 xunit 项目,从非异步事实开始,断言按预期编译,只是 Throws 不会使用它的信息进行编译过时的。它甚至是编译器错误,而不是警告。当我在回答时意识到这一点时,我也觉得这很奇怪。
  • @CeeMcSharpface:我无法重现这一点。请参阅gist.github.com/jskeet/5bf5776c84ed2becae1c931626871992,它对 xUnit 2.4.1 和 2.4.2-pre12 都没有问题。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2020-05-21
  • 1970-01-01
  • 2021-03-13
  • 2022-12-12
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多