gpt4 book ai didi

c# - 无法使用 Xunit 在异步方法中断言异常

转载 作者:行者123 更新时间:2023-12-04 00:56:37 25 4
gpt4 key购买 nike

代码测试中的一些错误引发了这个问题,由于代码的扩展,这里有一个完整的项目,它完全复制了我们遇到的问题(以节省您分析大量行的时间)。

问题是当试图从异步方法中捕获异常时,这里是 AsyncTest.cs文件:

using System;
using Xunit;

namespace AsyncTest
{
public class AsyncTest
{
[Fact]
public void ProbeTest()
{
// Arrange
var probe = new Probe();

// Act
Action action = async () =>
await probe.GetJob();

// Assert
var ex = Assert.Throws<InvalidOperationException>(action);
Assert.Contains("Trouble with Project.", ex.Message);
}
}
}

现在, Probe.cs要测试的类(注意 GetById 方法调用的延迟和异常抛出 GetJob 方法):
using System;
using System.Threading.Tasks;

namespace AsyncTest
{
class Probe
{
public async Task<MyResult<Guid>> GetJob()
{
var etlJob = await GetById("id");
return new MyResult<Guid>(etlJob);
}

public async Task<Guid> GetById(string id)
{
await Task.Delay(200);

throw new InvalidOperationException("Trouble with Project.");
}
}
}

最后, MyResult.cs Probe.cs 使用的类.
namespace AsyncTest
{
public class MyResult<T>
{
private T _value;

public MyResult(T Value)
{
_value = Value;
}

public string Message { get; set; }
public T Data { get; set; }
}
}

显然,即使 await Task.Delay(200);,测试也会在抛出异常之前结束。行被删除。在某些情况下,使用多个断点并将调用置于循环中,会抛出异常但测试未检测到。

它看起来像是同步和异步混合,但无法弄清楚到底是什么。

提前致谢。

最佳答案

尝试使您的测试方法异步并等待断言:

    [Fact]
public async Task ProbeTest()
{
// Arrange
var probe = new Probe();

// Act
Func<Task> action = async () => await probe.GetJob();

// Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>(action);
Assert.Contains("Trouble with Project.", ex.Message);
}

关于c# - 无法使用 Xunit 在异步方法中断言异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62033219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com