2010-03-12 67 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