我在Visual Studio 2012中使用最新版本的NUnit(2.6.2),使用了resharper和visual studio测试运行器。我有以下示例测试,其中我试图验证在预期的异步方法调用中引发异常。异步单元测试不能按预期工作
不幸的是,这似乎没有按预期工作。第一个测试AsyncTaskCanceledSemiWorking
仅适用,因为我有expectedexception属性。实际的断言是完全被忽略的(正如你可以通过ArgumentOutOfRange异常看到的那样,这只是一个假的让它失败)。
AsyncTaskCanceledWorking
工作正常,但没有测试在指定的行上引发异常,因此不太有用。
第三与下面庄严失败....
System.Threading.Tasks.TaskCanceledException : A task was canceled.
Exception doesn't have a stacktrace
我如何从一个特定的线路测试的TaskCanceledException将是非常有用的任何想法。
感谢
[Test]
[ExpectedException(typeof(TaskCanceledException))]
public async Task AsyncTaskCanceledSemiWorking()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
cancellationTokenSource.Cancel();
Assert.That(await LongRunningFunction(token), Throws.InstanceOf<ArgumentOutOfRangeException>());
}
[Test]
[ExpectedException(typeof(TaskCanceledException))]
public async Task AsyncTaskCanceledWorking()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
cancellationTokenSource.Cancel();
int i = await LongRunningFunction(token);
}
[Test]
public async Task AsyncTaskCanceledFailed()
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
cancellationTokenSource.Cancel();
Assert.That(await LongRunningFunction(token), Throws.InstanceOf<TaskCanceledException>());
}
public async Task<int> LongRunningFunction(CancellationToken token)
{
token.ThrowIfCancellationRequested();
await Task.Delay(1000, token);
return 5;
}
嗨,彼得,这将有助于知道你会期望什么行为,而不是。 – Simone