Я относительно новичок в модульном тестировании и пробую его в своих личных проектах. Я хочу провести модульное тестирование некоторых параллельных методов (фьючерсы, которые запускают действия в пуле потоков). Чтобы избежать завершения метода тестирования до объединения потоков, я блокирую тест. Вот фактический код блокировки:
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 секунд для тайм-аута и завершения. Есть ли способ заставить некоторые тесты запускаться одновременно? Я подхожу к этому неправильно?