2010-03-12 58 views
5

如何使用nunit测试异步方法?如何使用nunit测试异步方法

+3

你有什么问题?你只是测试它们;并检查他们正在做的事情。我的意思是,无论你需要等待什么。这只是看你是否可以通知你,所以你不需要投票。可能或不可能。 – 2010-03-12 09:26:05

+1

[]“我如何用NUnit测试异步方法,最终与另一个框架?”](http://stackoverflow.com/questions/12191831/how-do-i-test-an-async-method- with-nunit-minimize-with-another-framework) – chwarr 2014-05-17 05:01:53

+0

5 upvotes为7个字的问题显示没有研究工作? _ [我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)_。我很嫉妒;) – MickyD 2015-09-11 09:12:53

回答

2

如果你有.NET的C#编译器版本5,那么你可以使用新的异步和等待关键字。 附上链接: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 
    } 

} 
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,但早期版本还支持延迟约束,但查找起来的语法是不同的。

+0

StackOverflow不应该在没有解释的情况下让投票失败。请在投票时解释自己,这样可以帮助我们全部学习。 – Daryn 2018-02-02 13:32:24