C# Can';t使用Xunit在异步方法中断言异常

C# Can';t使用Xunit在异步方法中断言异常,c#,.net-core,xunit,xunit.net,C#,.net Core,Xunit,Xunit.net,代码测试中的一些错误引发了这个问题,由于代码的扩展,这里有一个完整的项目,它完全复制了我们的问题(以节省您分析大量行) 问题在于尝试从异步方法捕获异常时,这里是AsyncTest.cs文件: using System; using Xunit; namespace AsyncTest { public class AsyncTest { [Fact] public void ProbeTest() { //

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

问题在于尝试从异步方法捕获异常时,这里是
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
使用的
MyResult.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; }
    }
}
namespace异步测试
{
公共类MyResult
{
私人T_值;
公共MyResult(T值)
{
_价值=价值;
}
公共字符串消息{get;set;}
公共T数据{get;set;}
}
}
显然,即使
等待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);
    }
[事实]
公共异步任务ProbeTest()
{
//安排
var probe=newprobe();
//表演
Func action=async()=>
等待probe.GetJob();
//断言
var ex=await Assert.ThrowsAsync(操作);
Assert.Contains(“项目有问题”,例如Message);
}

太好了!!!,谢谢众所周知,异步异常已注册到任务中,但没有弄清楚如何处理它。
    [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);
    }