JUnit(实际上是 JUnit 4)的新手,遇到了执行测试的套件方法
@RunWith(Suite.class)
@Suite.SuiteClasses(
{
CreateNewProfile.class,
EditProfile.class,
})
public class ProfileTestSuite {
}
这是我在浏览新雇主的测试代码库时遇到的代码示例。
在执行过程中,我资助 - 首先执行 CreateNewProfile 测试,然后执行 EditProfile,
这确实有道理,但它引入了测试之间的依赖性。
几个月来我一直在遵循非依赖测试机制(尽管我曾经使用 TestNG 而不是 JUnit),并且希望 EditProfile 也能够单独执行。也就是说,编辑配置文件应该负责创建配置文件,然后对其进行编辑,然后断言操作。
我的问题是 - Junit 4 是否引入了测试排序功能。这个功能是有意为之还是一个复活节彩蛋,因为我一直觉得 JUnit = 独立测试。
没有 JUnit 不支持测试排序,除非以您所说的方式,通过Suite
。
这仅定义了测试的顺序classes被处决。这已经存在很长时间了,包括 JUnit 3 Suite 类。
为了更完整的解释,我们需要在这里讨论三件事:
- 测试套件中测试类的顺序
- Eclipse 或 Maven 通过反射找到测试类时的顺序
- 测试类中测试方法(用 @Test 注释)的顺序。
测试套件中测试类的顺序
当您指定要在测试套件中执行的类列表时,您正在定义一个数组,并且这些测试类将按顺序执行,除非您正在进行并行执行。不幸的是,这允许在测试类之间引入依赖关系。
通过反射找到测试类时的排序
在类路径中搜索类时,无法保证找到它们的顺序,因此不能依赖它们。实际上并不是 JUnit 进行搜索,而是 Eclipse Junit 插件、maven Surefire 或Failsafe。
测试类中测试方法的顺序
JUnit 不保证类内测试的执行顺序。大多数时候,在大多数版本 7 之前的 JVM 上,使用反射找到它们的顺序是声明顺序,即它们在文件中的顺序。这是它们的执行顺序。然而,在 JVM 7 中,这一点不再得到保证,因此不会有一致的顺序。有一个github问题#293 对可预测性测试方法进行排序 https://github.com/junit-team/junit/pull/293打开建议的解决方案,junit 邮件列表上有一个线程:按字母顺序排列测试方法运行顺序? http://tech.groups.yahoo.com/group/junit/message/23693。因此,您不能依赖使用 JUnit 执行测试的顺序,但这目前正在讨论中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)