[英]NUnit async Setup not supported?
我需要對以異步方式加載數據的方法進行單元測試。 我可以輕松地運行異步測試方法
[Test]
public async Task My_test_async() {
// ... await something
}
但我也希望Setup
方法是異步的。 因為它在模擬的Db中准備了一些數據。 這個模擬的db當然也是異步的(它必須實現相同的接口)。
所以我的設置方法如下所示:
[Setup]
public async Task Setup() {
var db = new InMemoryDbContext();
// ... add sample data in db context
// ... then save them
await db.SaveChangesAsync();
}
我正在使用NUnit版本3.0.1,NUnitTestAdapter.WithFramework版本2.0.0和VisualStudio 2015與Resharper 9.2
可能的解決方法
我可以解決這個問題,但兩種解決方案都不是很好。
解決方法#1
重構Setup()方法是私有的,從中刪除[Setup]屬性,並在每個測試方法中調用它。 這樣就可以等待,測試就會執行。
解決方法#2
或者我可以使安裝程序同步,並將異步代碼包裝在Task.Run().Result
,如下所示
var r = Task.Run(() => db.SaveChangesAsync()).Result;
但這兩種解決方法都很難看。
有誰知道更好的解決方案?
在NUnit3中
[OneTimeSetUp]
public async Task Setup()
{
解決#2:D
[SetUp]
public void Setup()
{
SetupAsync().Wait();
}
public async Task SetupAsync()
{
var db = new InMemoryDbContext();
// ... add sample data in db context
// ... then save them
await db.SaveChangesAsync();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.