由于代码的扩展,代码测试中出现了一些错误,这是一个完整的项目,它完全复制了我们所遇到的问题(以节省您分析大量的行的时间。)>]
问题是当试图从异步方法中捕获异常时,这里是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);
行,测试也会在引发异常之前结束。在某些情况下,使用多个断点并将调用置于循环中,则会引发异常,但测试不会检测到异常。
它看起来像是同步和异步的混合,但是无法确切地知道是什么。
提前感谢。
由于代码的扩展,代码测试中的一些错误引起了这个问题,这里是一个完整的项目,它完全复制了我们所遇到的问题(以节省您分析大量的行的时间)。问题...
尝试: