簡體   English   中英

是否不支持NUnit異步安裝?

[英]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 Runner跳過 在此輸入圖像描述

我正在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM