当前位置:  开发笔记 > 编程语言 > 正文

是否不支持NUnit异步安装?

如何解决《是否不支持NUnit异步安装?》经验,为你挑选了2个好方法。

我需要对以异步方式加载数据的方法进行单元测试.我可以轻松地运行异步测试方法

[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;

但这两种解决方法都很难看.

有谁知道更好的解决方案?



1> sQuir3l..:

解决#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();
}



2> Simon..:

在NUnit3中

[OneTimeSetUp]
public async Task Setup()
{

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有