2009-10-01 22 views
0

我對單元測試比較陌生,並且在我的個人項目上嘗試它。我想單元測試一些併發方法(在線程池中運行動作的期貨)。爲避免在線程集中操作之前完成測試方法,我正在阻止測試。下面是實際的阻塞代碼:如何讓視覺工作室不要等待暫時阻止的測試?

Private Shared Function BlockOnFuture(ByVal future As IFuture, 
             ByVal timeout As TimeSpan) As Boolean 
    Dim waitHandle = New System.Threading.ManualResetEvent(initialState:=False) 
    AddHandler future.Ready, Sub() waitHandle.Set() 
    If future.State <> FutureState.Unknown Then waitHandle.Set() 'already ready' 
    Return waitHandle.WaitOne(timeout) 
End Function 
Private Shared Function BlockOnFuture(ByVal future As IFuture) As Boolean 
    Return BlockOnFuture(future, New TimeSpan(0, 0, seconds:=5)) 
End Function 

我有特意不設定未來的測試,例如:

<TestMethod()> 
Public Sub CallWhenReady_Dangle() 
    Dim flag = True 
    Dim future = New FutureAction() 'A class which has methods to make it become ready' 
    Dim result = future.CallWhenReady(Sub(exception) 
              flag = False 
             End Sub) 
    'should fail, because the future action is not being set' 
    Assert.IsFalse(BlockOnFuture(result)) 
    'future was not set so the action did not run' 
    Assert.IsTrue(flag) 
    'action did not run so the result should not be set either' 
    Assert.IsTrue(result.State = FutureState.Unknown) 
End Sub 

我認爲Visual Studio中運行測試一個接一個,因爲每一個測試當這一個需要5秒超時並完成時耐心等待。有沒有一種方法可以強制某些測試同時運行?我接近這個錯誤嗎?

回答

0

這是一個漫長的一天,但我認爲我的建議是方法是錯誤的。真的,你想剔除未來的行爲。

kluge會修改默認的測試超時。你可以用我認爲的屬性來做到這一點(大多數測試Fx讓你這樣做,但我不記得MSTest的語法,它看起來像你正在使用的那個)。

+0

殘樁如何幫助?在這個測試中,「輸入」的未來幾乎沒有任何意義,我檢查從該方法返回的未來也沒有做任何事情。另外,我將超時設置爲測試的一部分。它不是MSTest的一部分。 – 2009-10-02 00:09:50