如何让visual studio不等待暂时阻止的测试?

时间:2009-10-01 22:06:24

标签: visual-studio unit-testing concurrency

我对单元测试比较陌生,并在我的个人项目上尝试。我想单元测试一些并发方法(在线程池中运行操作的期货)。为了避免测试方法在线程池操作之前完成,我阻止了测试。这是实际的阻止代码:

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秒才能超时并完成。有没有办法可以强制某些测试同时运行?我接近这个错误吗?

1 个答案:

答案 0 :(得分:0)

这是漫长的一天,但我认为我的建议是方法是错误的。你真的想要扼杀未来的行为。

克隆将修改默认测试超时。您可以使用我认为的属性执行此操作(大多数测试Fx允许您执行此操作,但我不记得MSTest的语法,它似乎是您正在使用的那个)。