可能重复:
How do I test an async method with NUnit, eventually with another framework?如何声明C#异步方法在单元测试中引发异常?
我想知道的是,我怎么能断言异步方法抛出一个异常,在C#单元测试?我能够在Visual Studio 2012中使用Microsoft.VisualStudio.TestTools.UnitTesting
编写异步单元测试,但尚未弄清楚如何测试异常。我知道xUnit.net也以这种方式支持异步测试方法,尽管我还没有尝试过这个框架。
对于我的意思一个例子,以下代码定义被测系统:
using System;
using System.Threading.Tasks;
public class AsyncClass
{
public AsyncClass() { }
public Task<int> GetIntAsync()
{
throw new NotImplementedException();
}
}
此代码段定义了一个测试TestGetIntAsync
为AsyncClass.GetIntAsync
。这是我需要在如何实现这一目标GetIntAsync
抛出异常的断言输入:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
[TestClass]
public class TestAsyncClass
{
[TestMethod]
public async Task TestGetIntAsync()
{
var obj = new AsyncClass();
// How do I assert that an exception is thrown?
var rslt = await obj.GetIntAsync();
}
}
随意聘请多名Visual Studio的一个,如xUnit.net一些其他相关的单元测试框架,如果有必要或你会认为这是一个更好的选择。
@JonSkeet不是真的,因为这是专门关于检查异常。尽管我现在看到它与Visual Studio框架没有任何区别。然而,对于xUnit.net,我仍然不确定如何去做。 – aknuds1
@JonSkeet最初我同意了,但现在我不同意。如果这个问题是正确的,因为微软的单元测试已经支持异步测试,你对这个问题的答案在这里并不适用。唯一的问题是重写测试,以便测试异常。 – hvd
@hvd:在这种情况下,听起来像这个问题有*无关*与异步 - 当然,给出的答案不依赖于异步部分。 –