As of today (7/2/2014) async testing is supported by:
In the first two frameworks, the test method must have this signature:
[TestMethod]
public async Task MyTestMethod()
{
...
var result = await objectUnderTest.TestedAsyncMethod(...);
// Make assertions
}
NUnit v2.6.2+ (but before 3.0), apart from that signature, supports this one:
public async void MyTestMethod()
Of course, inside any of these test methods you can use await
to call and wait on asynchronous methods.
If you're using a testing framework that doesn't support async test methods, then, the only way to do it, is to call the async method and wait until it finishes running using any of the usual ways: await
, reading the Result
property of the Task<T>
returned by an async
method, using any of the usual wait methods of Task
and so on. After the awaiting, you can do all the asserts as usual. For example, using MSTest:
[TestMethod]
public void MyTestMethod()
{
...
Task<MyResultClass> task = objectUnderTest.MyAsyncMethod(...);
// Make anything that waits for the method to end
MyResultClass result = task.Result;
// Make the assertions
Assert.IsNotNull(result);
...
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…