gpt4 book ai didi

c# - 带有异步成员数据的 xUnit 理论

转载 作者:行者123 更新时间:2023-12-04 04:25:13 26 4
gpt4 key购买 nike

我有一个使用 xUnit.net 的单元测试项目v.2.3.1 用于我的 ASP.NET Core 2.0 Web 应用程序。

我的测试应该侧重于测试给定的 DataEntry 实例:DataEntry 实例由我的 DataService 类中的异步方法 GenerateData() 生成,如下所示:

public class DataService {
...
public async Task<List<DataEntry>> GenerateData() {
...
}
...
}

我正在将此测试用例编写为理论,因此我的测试可以一次专注于一个 DataEntry 实例。这是代码:
[Theory]
[MemberData(nameof(GetDataEntries))]
public void Test_DataEntry(DataEntry entry) {

// my assertions
Assert.NotNull(entry);
...

}

public static async Task<IEnumerable<object[]>> GetDataEntries() {

var service = new DataService();
List<DataEntry> entries = await service.GenerateData().ConfigureAwait(false);

return entries.Select(e => new object[] { e });

}

但是,我在编译时收到以下错误:

MemberData must reference a data type assignable to 'System.Collections.Generic.IEnumerable<object[]>'. The referenced type 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<object[]>>' is not valid.



从错误描述来看,似乎 xUnit.net不允许 MemberData 使用异步静态方法,例如我的 GetDataEntries() 方法。 xUnit.net中是否有任何功能差距?我应该知道?

现在,我知道我可以将我的理论转换为事实并遍历我的 DataService 返回的列表中的每个 DataEntry,但是我更愿意保留理论设置,因为我的测试会更清晰并专注于 DataEntry 而不是 List .

问题 : 在 xUnit.net 有什么办法吗?让我的理论从我的 DataService 异步 API 获取数据?请注意,无法更改或扩展 DataService 类以同步提供数据。

编辑

我正在寻找一种通过 async/await 的方法,并且希望避免使用任何阻塞调用,例如 Task .Result,例如在我的 GenerateData() 方法上,因为底层线程将被阻塞,直到操作完成。
这在我的测试项目中是相关的,因为我有其他类似的测试用例,其中数据应该以相同的方式检索,因此我想避免以太多阻塞调用结束,而是保持异步/等待传播。

最佳答案

在 xUnit 允许异步理论数据之前,您可以使用 Task<T>实例作为理论数据并在测试方法中等待它们(注意测试方法可以是异步的):

public static IEnumerable<object> GetDataEntries() {
var service = new DataService();
yield return new object[] { service.GenerateData() };
}

[Theory]
[MemberData(nameof(GetDataEntries))]
public async Task Test_DataEntry(Task<List<DataEntry>> task) {
List<DataEntry> entries = await task;

for (int i = 0; i < entries.Count; i++) {
// my assertions
Assert.NotNull(entries[i]);
}
}

关于c# - 带有异步成员数据的 xUnit 理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50170057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com