关于使用VS2010进行集成测试,我有两个问题
首先,我真的需要找到一种方法来按我想要的顺序执行这些测试方法。注意:我知道在单元测试中,方法应该独立于其他任何东西运行,但这些是集成测试,我确实依赖于哪个方法首先运行的顺序。
同样,有没有一种方法可以通过运行测试来保持局部变量?例如,下面的代码现在失败了。
[TestClass]
public class UnitTest1
{
int i = 0;
[TestMethod]
public void TestMethod1()
{
i = 5;
}
[TestMethod]
public void TestMethod2()
{
Assert.AreEqual(5, i);
}
}
那么有没有办法做到这些呢?
发布于 2011-01-14 15:37:36
为了按照特定的顺序执行测试,我遵循了以下步骤:
在包含test1、test2和test3的测试项目中
1右击项目'Add'->'new test...‘
2.选择“有序测试”
3双击出现"OrderedTest1.orderedtest“的文件
4如果以前没有构建过项目,则构建项目
5从可用测试列表中选择所需的测试并对其进行排序
此时,将在测试列表编辑器中显示一个新测试
这是一个额外的测试,它以正确的顺序运行包含的测试,但是如果您不小心运行项目中的所有测试,有序列表中包含的测试将被执行两次,因此您需要以某种方式管理列表或测试类别以避免这种情况。
我尝试禁用单个测试,但这也禁用了有序测试,我不知道更好的方法。
发布于 2011-01-14 04:46:46
通过使用属性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
https://stackoverflow.com/questions/4684408
复制相似问题