gpt4 book ai didi

c# - 不支持 NUnit 异步设置?

转载 作者:太空狗 更新时间:2023-10-29 22:09:07 25 4
gpt4 key购买 nike

我需要对以异步方式加载数据的方法进行单元测试。我可以通过

轻松运行异步测试方法
[Test]
public async Task My_test_async() {
// ... await something
}

但我还希望 Setup 方法是异步的。因为它在模拟 Db 中准备了一些数据。这个模拟数据库当然也是异步的(它必须实现相同的接口(interface))。

所以我的设置方法是这样的:

[Setup]
public async Task Setup() {
var db = new InMemoryDbContext();
// ... add sample data in db context
// ... then save them
await db.SaveChangesAsync();
}

但这会导致 NUnit Runner 跳过我的测试 enter image description here

我使用的是 NUnit 版本 3.0.1、NUnitTestAdapter.WithFramework 版本 2.0.0 和 VisualStudio 2015 以及 Resharper 9.2

可能的解决方法

我可以解决这个问题,但两种解决方案都感觉不错。

解决方法 #1

将 Setup() 方法重构为私有(private)方法,从中移除 [Setup] 属性,并在每个测试方法中调用它。这样就可以等待它并执行测试。

解决方法#2

或者我可以使安装程序同步,并将异步代码包装在 Task.Run().Result 中,如下所示

var r = Task.Run(() => db.SaveChangesAsync()).Result;

但这两种解决方法都很丑陋。

有人知道更好的解决方案吗?

最佳答案

在 NUnit3 中

[OneTimeSetUp]
public async Task OneTimeSetup()
{
// fixture one time setup code, can use await here
}

[SetUp]
public async Task Setup()
{
// per test setup, can use await here
}

关于c# - 不支持 NUnit 异步设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129677/

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