我正在使用JUnit和Selenium Webdriver。我想按照我在代码中编写测试方法的顺序运行我的测试方法,如下所示:
@Test
public void registerUserTest(){
// code
}
@Test
public void welcomeNewUserTest(){
// code
}
@Test
public void questionaireNewUserTest(){
// code
}
但它不起作用,它总是按此顺序执行我的测试方法:
welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()
如果我用后缀Test命名我的方法,那么我在某处读了一个答案,然后JUnit将按顺序执行它们,就像我在代码中命令它们一样。显然,这不起作用。
有帮助吗?谢谢
因此,对于像这样的测试 - 步骤彼此依赖 - 您应该将它们作为一个单元执行。你真的应该这样做:
@Test
public void registerWelcomeAndQuestionnaireUserTest(){
// code
// Register
// Welcome
// Questionnaire
}
正如@Jeremiah在下面提到的,有一些独特的方法可以让不可预测的单独测试执行。
现在我已经说过了,这是你的解决方案。
如果你想要单独的测试,你可以使用@FixMethodOrder然后通过NAME_ASCENDING
来做。这是我所知道的唯一方式。
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestMethodOrder {
@Test
public void testA() {
System.out.println("first");
}
@Test
public void testC() {
System.out.println("third");
}
@Test
public void testB() {
System.out.println("second");
}
}
将执行:
testA(), testB(), testC()
在你的情况下:
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ThisTestsEverything{
@Test
public void T1_registerUser(){
// code
}
@Test
public void T2_welcomeNewUser(){
// code
}
@Test
public void T3_questionaireNewUser(){
// code
}
}
您无法按照编写方式运行测试方法。关键是测试必须相互独立。 JUnit不鼓励依赖测试。
但如果你非常想......
有@FixMethodOrder注释。请阅读以下Annotation Type FixMethodOrder
您可以使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)
注释对方法进行排序。喜欢,
@FixMethodOrder(MethodSorters.DEFAULT)
public class DefaultOrderOfExecutionTest {private static StringBuilder output = new StringBuilder(“”);
@Test
public void secondTest() {
output.append("b");
}
@Test
public void thirdTest() {
output.append("c");
}
@Test
public void firstTest() {
output.append("a");
}
@AfterClass
public static void assertOutput() {
assertEquals(output.toString(), "cab");
}
}
您可以通过3种方式执行排序:
有关详细信息,请参阅:The Order of Tests in JUnit
在要执行测试的类上方使用以下命令
@FixMethodOrder(MethodSorters.JVM)
public class TestMethodOrder {
@Test
public void signup() {
System.out.println("Signup");
}
@Test
public void login() {
System.out.println("Login");
}
@Test
public void navigate() {
System.out.println("Navigate");
}
}
MethodSorters.JVM注释将以您实际写入文件的方式执行测试。 (就像Java代码一样逐行执行)