无法使用Xunit声明异步方法中的异常

问题描述 投票:0回答:1

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

问题是当试图从异步方法中捕获异常时,这里是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);行,测试也会在引发异常之前结束。在某些情况下,使用多个断点并将调用置于循环中,则会引发异常,但测试不会检测到异常。

它看起来像是同步和异步的混合,但是无法确切地知道是什么。

提前感谢。

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

c# .net-core xunit xunit.net
1个回答
0
投票

尝试:

© www.soinside.com 2019 - 2024. All rights reserved.