2011-01-13 75 views
18

我有2个问题在使用VS 2010进行集成测试如何使用Visual Studio订购执行方法以执行集成测试?

首先,我真的需要找到一种方法来按照我希望的顺序执行这些测试方法。注:我知道在单元测试中,方法应该独立于其他任何东西,但这些都是集成测试,我依赖于哪个方法首先运行的顺序。

在同样的说明中,有没有办法通过运行测试来保持局部变量?例如像下面的代码现在失败了。

[TestClass] 
public class UnitTest1 
{ 
    int i = 0; 
    [TestMethod] 
    public void TestMethod1() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

那么有没有办法做到这些?

回答

21

要按照特定的顺序执行测试我也跟着下面的步骤:

在测试项目与TEST1,TEST2和TEST3

1右键单击该项目“添加” - >“新的测试......”
2选择‘顺序测试’
3中的文件T双重点击帽子出现“OrderedTest1。orderedtest”

alt text

4生成项目,如果没有建立以前
5从可用的测试列表中选择要测试并责令其

alt text

从这点出现在测试列表编辑器中的新测试

alt text

这是一个额外的测试,它以正确的顺序运行封闭的测试,但是如果您不小心运行了项目中的所有测试,包含在有序列表中的测试将执行两次,因此您需要以某种方式管理列表或测试类别以避免这种情况。
我试过禁用单个测试,但也禁用了有序的测试,我不知道这样做的更好方法。

6

通过使用属性[TestInitialize]和[TestCleanUp]或[ClassInitialize]和[ClassCleanup],最好使用函数来设置测试并对其进行清理。
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting(v=VS.100).aspx

下面的代码是类似的事情为例,你想要什么:

[TestClass] 
public class UnitTest1 
{ 
    int i=0; 

    [TestInitialize] 
    public void Setup() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

功能设置将执行每个测试之前调用。 如果您需要将值从一个测试传递给另一个测试,则可能需要考虑使用静态变量,由于执行的不确定性顺序,因此不推荐使用该变量。

通常有一种方法可以避免使用设置/清除技术来需要特定的顺序,但确实如此,对于非常复杂的集成测试来说,这可能并非如此。
如果没有可能的方法来避免让他们重新排序,你可以考虑将它们合并为一个,再次突破每个测试只有一个断言的最佳实践,但是如果它们相互依赖得太多,它可能会是偶数这样做更好,因为在这种情况下,一次测试失败可能会损害其他测试结果。

编辑: 可能使用命令测试解答问题1,使用静态变量的问题2: http://msdn.microsoft.com/en-us/library/ms182631.aspx

+0

谢谢Cristian的意见。我知道你提到的属性,不幸的是这些不是我所追求的。我正在对测试数据源运行集成测试,所以即使它们在某个地方失败了,我仍然可以恢复数据。我在SpecFlow上看到了Rob Conery的视频,他似乎已经实现了http://tekpub.com/view/concepts/5我只是不知道他是如何做到的。 – 2011-01-13 20:58:51

+0

我刚刚添加了编辑的问题,并添加了有序测试的想法。让我知道这是否真的有效。 – 2011-01-13 21:15:24

相关问题