【问题标题】:Unit Testing in Visual StudioVisual Studio 中的单元测试
【发布时间】:2011-04-01 14:51:30
【问题描述】:

我想创建大量单元测试以确保我的存储过程正常工作,但我失败了(我是 Visual Studio 测试的新手)。

基本上我想做以下事情:

<testclass()>
Dim myglobalvariable as integer

<testmethod()>
Public sub test()
    -> use stored procedure to insert a record
    set myglobalvariable = result from the sp
end sub


public sub test2()
    -> use a stored procedure to modify the record we just added
end sub

public sub test3()
    -> use a stored procedure to delete the record we just added
end sub
end class

问题是因为测试没有按顺序运行,测试 2 和 3 失败,因为未设置全局变量。

建议? :'(

【问题讨论】:

  • 您的目标应该是编写不相互依赖的测试。应首先执行测试所需的任何设置/拆卸。顺便说一句,如果您实际上是在调用数据库,这更像是一个集成测试而不是单元测试,因为您同时测试数据库和访问代码。

标签: vb.net visual-studio visual-studio-2010 unit-testing testing


【解决方案1】:

这里的关键词是“单位”。

单元测试应该是自包含的,即由执行测试的代码组成,并且不应该依赖于首先执行的其他测试,或影响其他测试的运行。

请参阅此处的 TDD 反模式列表,了解编写测试时应避免的事情。 http://blog.james-carr.org/2006/11/03/tdd-anti-patterns/

【讨论】:

    【解决方案2】:

    查看TestInitializeAttribute。你可以把它放在一个方法上,该方法应该在每次测试之前运行以分配适当的资源。

    附带说明,因为您似乎误解了这些应该的工作方式:单元测试不应该需要来自其他测试的工件。如果您正在测试修改,初始化/设置方法应该创建要修改的空间。

    【讨论】:

      【解决方案3】:

      查看Why TestInitialize gets fired for every test in my Visual Studio unit tests?

      我认为这将为您指明正确的方向。您可以将其作为TestInitialize 运行,而不是将其作为测试运行。

      有“有序测试”,但它打破了每个测试独立运行的想法。

      【讨论】:

      【解决方案4】:

      首先,您描述的测试听起来不像是单元测试,而更像是集成测试。单元测试通常是测试代码中的一个功能单元,与系统的其余部分隔离,并在内存中运行。集成测试旨在验证系统组件在组装在一起时是否按预期工作。
      然后,在不深入系统细节的情况下,在我看来,我会将它作为一个单独的测试来处理,调用多个方法 - 类似于:

      [Test]
      public void Verify_CreateUpdateDelete()
      {
        CreateEntity();
        Assert that the entity exists
        UpdateEntity();
        Assert that the entity has been updated
        DeleteEntity();  
        Assert that the entity has been deleted
      }
      

      【讨论】:

        猜你喜欢
        • 2010-09-18
        • 2018-04-16
        • 2016-10-30
        • 2012-10-18
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多