我正在使用JUnit和Selenium Webdriver。我想按照我在代码中编写测试方法的顺序运行我的测试方法,如下所示:
welcomeNewUserTest()
registerUserTest()
questionaireNewUserTest()
但它不起作用,它总是按此顺序执行我的测试方法:
[(LName, FName, Credits)]
如果我用后缀Test命名我的方法,我会在某处读取答案,然后JUnit将按顺序执行它们,就像我在代码中命令它们一样。显然,这不起作用。
有任何帮助吗?感谢
答案 0 :(得分:7)
因此,对于这样的测试 - 步骤彼此依赖 - 您应该将它们作为一个单元执行。你应该做的事情真的像:
@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
}
}
答案 1 :(得分:2)
您无法按照编写方式运行测试方法。 关键是测试必须相互独立。 JUnit并不鼓励依赖测试。
但如果你非常想......
有@FixMethodOrder注释。请阅读以下Annotation Type FixMethodOrder
答案 2 :(得分:0)
您可以对带有@FixMethodOrder(MethodSorters.NAME_ASCENDING)
批注的方法进行排序。喜欢,
@FixMethodOrder(MethodSorters.DEFAULT)
公共类DefaultOrderOfExecutionTest { 私有静态StringBuilder输出=新的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
答案 3 :(得分:-1)
在要执行测试的类上方使用以下命令
@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代码一样,逐行执行)