如何使用Visual Studio命令执行集成测试?

时间:2011-01-13 19:36:48

标签: visual-studio-2010 testing integration-testing

关于使用VS 2010进行集成测试,我有两个问题

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

同样,有没有办法通过运行测试来保留局部变量?例如,就像现在失败的以下代码一样。

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

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

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

2 个答案:

答案 0 :(得分:21)

要按特定顺序执行测试,我按照以下步骤操作:

在test1,test2和test3

的测试项目中

1右击项目'添加' - >'新测试......“
2选择“有序测试”
3双击出现“OrderedTest1.orderedtest”

的文件

alt text

4如果之前没有构建项目,请构建项目 5从可用测试列表中选择所需的测试并订购它们

alt text

从那时起,测试列表编辑器中出现了一个新测试

alt text

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

答案 1 :(得分: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);
    }
}

在执行每个测试之前将调用函数SetUp。 如果您需要将值从一个测试传递到另一个测试,您可能需要考虑使用静态变量,由于不确定的执行顺序,不建议使用该变量。

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

编辑: 可能正在使用有序测试答案问题1,并使用静态变量问题2: http://msdn.microsoft.com/en-us/library/ms182631.aspx