我如何对依赖TaskCompletionSource的类进行单元测试?

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

我有一个依赖于TaskCompletionSource的课程

该类的示例如下:

TaskCompletionSource

我正在使用public ExampleClass { private TaskCompletionSource<string> _tcs; public async Task<string> GetFooAsync() { _tcs = new TaskCompletionSource<string>(); return await _tcs.Task; } public void SetFoo(string value) { _tcs.SetResult(value); } } 作为测试框架。

xUnit.net

(请参阅代码中的注释)

c# unit-testing xunit.net taskcompletionsource
1个回答
0
投票

对于此示例情况,测试需要以不同的方式安排

[Fact]
public async Task ReturnsString()
{
    // Arrange
    const string value = "test";
    var myclass = new ExampleClass();

    // Act -- Does not work. I don't know how to fix this.
    var result = await myclass.GetFooAsync(); // Won't return before SetFoo is called
    myclass.SetFoo(value); // Needs to be run after GetFooAsync is called

    // Assert
    Assert.Equal(value, result);
}

可以启动任务而不必等待任务,以使sut能够设置任务结果。

一旦设置了结果,就可以按照预期的方式等待任务,以验证预期的行为

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