关于使用VS 2010进行集成测试,我有两个问题
首先,我真的需要找到一种方法来按照我想要的顺序执行这些测试方法。注意:我知道在单元测试中,方法应该从其他任何东西独立运行,但这些是集成测试,我依赖于首先运行哪个方法的顺序。
同样,有没有办法通过运行测试来保留局部变量?例如,就像现在失败的以下代码一样。
[TestClass]
public class UnitTest1
{
int i = 0;
[TestMethod]
public void TestMethod1()
{
i = 5;
}
[TestMethod]
public void TestMethod2()
{
Assert.AreEqual(5, i);
}
}
那么有没有办法做这些呢?
答案 0 :(得分:21)
要按特定顺序执行测试,我按照以下步骤操作:
在test1,test2和test3
的测试项目中 1右击项目'添加' - >'新测试......“
2选择“有序测试”
3双击出现“OrderedTest1.orderedtest”
4如果之前没有构建项目,请构建项目 5从可用测试列表中选择所需的测试并订购它们
从那时起,测试列表编辑器中出现了一个新测试
这是一个额外的测试,以正确的顺序运行所附测试,但是如果你不小心在项目中运行所有测试,那么有序列表中包含的测试将被执行两次,因此你需要以某种方式管理列表或测试类别避免这种情况 我尝试禁用单个测试,但也禁用了有序测试,我不知道更好的方法。
答案 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