有没有办法在测试类中首先执行特定的测试用例,而不管类中存在测试用例的顺序?
示例:
public class TestExample {
@Test
public void test1() {}
@Test
public void test2(){}
}
我们可以先执行test2吗?我们有 @Order 这样的东西吗?
谢谢!
答案 0 :(得分:4)
订购测试通常被认为是一个坏主意,因为它意味着测试不是独立的。非独立测试可能导致多个测试失败(例如,如果您有多个测试依赖于另一个测试设置的共享状态,如果沿途的任何测试都无法清理,那么连续测试会受到损害),它可以是很难弄清楚出了什么问题。理想的是一个问题应该导致一个测试失败。
无论如何,我曾经想过因为前面的JUnit不支持这个,但显然它确实如此,see this answer。 (对于指出这一点的其他答案,+1。)制作自己的MethodSorter的一个简单方法是使用现有的一个,NAME_ASCENDING,并更改您想要首先进行的方法名称,以便排序最高。
BTW这个特征并不完全令人憎恶;例如,如果您处于怀疑依赖关系陷入困境的情况下,最好有一种方法来调整测试的顺序,以弄清楚发生了什么。如果在执行任何测试之前有想要执行的内容,还有一个@BeforeClass
注释。
答案 1 :(得分:2)
即使依赖于测试方法的顺序,我认为这是一种不好的做法,您仍然可以使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)
注释(如果适合)。
如果这还不够,您还可以查看此post。
答案 2 :(得分:2)
Junit和大多数单元测试框架的想法是所有测试都是独立的(不依赖于另一个),因此可以按任何顺序运行。我认为有些人会以随机顺序这样做。
我认为需要首先运行一个shpows,你的设置有问题。如果需要对所有测试或测试之前进行某些操作,请考虑在@setUp方法中实现该方法
如果您需要测试按顺序运行,因为您有依赖关系等,那么我会查看TestNG来自version 4.11的Junit有@FixMethodOrder(MethodSorters.NAME_ASCENDING)
断言,因此您可以将第一个方法设为首先按字母顺序排列
答案 3 :(得分:-1)
为什么不呢?
public void test1(){
}
public void test2(){
}
@Test
public void test() {
test2();
test1();
}
答案 4 :(得分:-1)
我使用这种模式:
public class TestExample {
@Test
public void test1() {
firstTest();
...rest of test1...
}
@Test
public void test2(){
firstTest();
}
private static boolean ranCommonCode = false;
private void firstTest() {
if( ranCommonCode ) return;
ranCommonCode = true;
...code of test2...
}
}