如何使用nunit测试异步方法?
答案 0 :(得分:2)
如果你有.NET的C#编译器版本5,那么你可以使用新的async和await关键字。 附上链接:http://simoneb.github.io/blog/2013/01/19/async-support-in-nunit/
如果可以使用带有匿名lambda函数的闭包,则使用线程同步。
例如)
[TestFixture]
class SomeTests
{
[Test]
public void AsyncTest()
{
var autoEvent = new AutoResetEvent(false); // initialize to false
var Some = new Some();
Some.AsyncFunction(e =>
{
Assert.True(e.Result);
autoEvent.Set(); // event set
});
autoEvent.WaitOne(); // wait until event set
}
}
答案 1 :(得分:0)
您可以使用NUnits Delayed Constraint
[TestFixture]
class SomeTests
{
[Test]
public void AsyncTest()
{
var result = false;
var Some = new Some();
Some.AsyncFunction(e =>
{
result = e.Result;
});
Assert.That(() => result, Is.True.After(1).Minutes.PollEvery(500).MilliSeconds);
}
}
此示例适用于NUnit 3.6,但早期版本也支持延迟约束,但在语法不同时查找它。