【问题标题】:How to force specific Visual Basic .NET unit test to run serially如何强制特定的 Visual Basic .NET 单元测试串行运行
【发布时间】:2013-04-27 07:03:45
【问题描述】:

在将测试配置为并行运行时,例如使用 ReSharper,似乎无法将特定的单元测试类标记为串行运行。

需要这样做的类的一个示例可能是在每次单独测试之前删除/重新创建数据(从数据库或只是文件结构)。

如果并行测试运行开始,它们都可以在任何时候点击 MyTestInitialize(),这会导致其他正在断言各种条件的测试混乱。

【问题讨论】:

    标签: vb.net unit-testing resharper


    【解决方案1】:

    Visual Studio 2010 中的一个好方法似乎是创建一个具有单个共享对象的类,然后可以在调用 MyTestIntialize() 时锁定该对象,并在调用 MyTestCleapup() 时解锁该对象。

    例如

    ' Prevent resharper running tests in parallel
    Public Class SingleProcess
        Public Shared Lock As New Object
    End Class
    '.....
    <TestClass()> _
    Public Class MyTestClass
    
        <TestInitialize()> _
        Public Sub MyTestInitialize()
            Threading.Monitor.Enter(SingleProcess.Lock)
            ' Do initialize stuff
        End Sub
        '
        <TestCleanup()> _
        Public Sub MyTestCleanup()
            ' Release lock
            Threading.Monitor.Exit(SingleProcess.Lock)
        End Sub
    

    【讨论】:

      【解决方案2】:

      您可以使用 Visual Studio 的 Ordered Tests 功能来定义单元测试需要运行的顺序。

      但是,请记住,每个单元测试都应该是独立的,不应依赖于前一个单元测试的结果。

      参考资料:

      【讨论】:

      • 它们取决于初始化部分,这就是它的用途。然而,发生的情况是多个线程正在运行测试并在不同的时间点击 init 部分,并且由于它们正在处理单个真实对象,在这种情况下是目录中的数据文件,所有的地狱都崩溃了。
      • 测试也完全不依赖于先前单元测试的结果,它们依赖于访问全局资源,在这种情况下是文件。拥有一类没有依赖关系的单元测试使用模拟对象来验证交互并拥有另一组测试来实际测试与数据库和文件等对象的集成和真实交互,这是非常好的。
      猜你喜欢
      • 2011-05-23
      • 2019-02-22
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2019-07-02
      • 2016-11-18
      • 1970-01-01
      • 2022-07-26
      相关资源
      最近更新 更多