我在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