Gil*_*and 5 c# nunit unit-testing asynchronous async-await
我需要为每个单元测试都有一个登录用户,这迫使我在测试中进行异步调用(登录)SetUp.
我无法找到使这项工作的方法,我要么得到空指针异常,要么设置无效签名.
public async void SetUp() {}
Run Code Online (Sandbox Code Playgroud)
这使我的所有测试都失败了我的对象可能是因为我没有登录.
public async Task SetUp() {}
Run Code Online (Sandbox Code Playgroud)
使我的所有测试都被忽略,因为安装程序的签名无效.
而且我不想在每次测试中复制我的X行设置,因为它们都完全相同,而且......这就是设置的目的.
我错过了什么?这似乎是一个微不足道的问题.
这是我现在所拥有的,为了展示一些东西
CreateTicketViewModel _viewModel;
[SetUp()]
public async void SetUp() //I have tried using Task instead of void
{
IUserService userService = Dependency.Instance.Resolve<IUserService>();
await userService.LoginAsync(this.UserName, this.Password);
_viewModel = Dependency.Instance.Resolve<CreateTicketViewModel>();
}
[TearDown()]
public void TearDown()
{
_viewModel = null; // I have tried removing this
}
[Test()]
public void Initialization()
{
// If I put what's in SetUp here and add "async" before void,
// it works just fine
Assert.IsNotNull(_viewModel);
Assert.IsNotNull(_viewModel.Ticket);
}
Run Code Online (Sandbox Code Playgroud)
根据您使用的单元测试框架async,该框架可能无法正确处理设置。
在 NUnits 的情况下,我认为它不支持异步设置方法。
所以你应该在你的设置中做的是同步等待登录完成:
userService.LoginAsync(this.UserName, this.Password).Wait();
编辑:看起来这是一个悬而未决的问题https://github.com/nunit/nunit/issues/60
MSTests 也是如此。