等待xUnit.net中的测试设置代码中的任务?

Wor*_*red 22 c# xunit.net async-await

确切的情况是我正在使用Protractor.NET(AngularJS的Protractor E2E框架的.NET端口)进行E2E测试,我想做一些Web请求(以及API System.Net.Http.HttpClient- 有所有异步/ Task方法)来安排我的在Act/Assert之前进行测试,只有我需要做同样的安排进行多次测试.

我正在使用xUnit.net作为我的测试运行器,他们使用一个接口(IUseFixture<T>)来获得每个夹具的设置代码.如果有IAsyncUseFixture<T>一个Task SetFixtureAsync(T t);或那个东西会很好.我不认为这样的事情存在.另外,我不认为构造函数可以使用它们await,构造函数是在xUnit.net中执行相同代码块的唯一方法.

我有什么选择? .Result?是不是那种不好的做法(死锁)?

Wil*_*lka 53

xUnit有一个IAsyncLifetimeasync setup/teardown接口.您需要实现的方法是Task InitializeAsync()Task DisposeAsync().

InitializeAsync 在创建类之后立即调用它,然后再使用它.

DisposeAsyncIDisposable.Dispose如果类也实现的话,就在之前调用IDisposable.

例如

public class MyTestFixture : IAsyncLifetime
{
    private string someState;

    public async Task InitializeAsync()
    {
        await Task.Run(() => someState = "Hello");
    }

    public Task DisposeAsync()
    {
        return Task.CompletedTask;
    }

    [Fact]
    public void TestFoo()
    {
        Assert.Equal("Hello", someState);
    }
}
Run Code Online (Sandbox Code Playgroud)