Java 如何使用Junit按顺序运行测试方法
我正在使用JUnit和SeleniumWebDriver。我希望按照在代码中编写测试方法的顺序运行测试方法,如下所示:Java 如何使用Junit按顺序运行测试方法,java,selenium-webdriver,junit,automated-tests,Java,Selenium Webdriver,Junit,Automated Tests,我正在使用JUnit和SeleniumWebDriver。我希望按照在代码中编写测试方法的顺序运行测试方法,如下所示: @Test public void registerUserTest(){ // code } @Test public void welcomeNewUserTest(){ // code } @Test public void questionaireNewUserTest(){ // code } 但它不起作用,它总是按以下顺序执行我的测试方
@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在下面提到的,有几种独特的方法可以让单独的测试不可预测地执行
我已经说过了,这是你的解决方案
如果需要单独的测试,可以使用,然后通过NAME\u升序
来完成。这是我唯一知道的方法
@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注释。请阅读以下内容在要执行测试的类上方使用以下命令
@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代码执行的方式一样,逐行)您可以使用
@FixMethodOrder(methodsorter.NAME\u升序)
注释对方法进行排序。像
@FixMethodOrder(MethodSorters.DEFAULT)
公共类DefaultOrderOfExecutionTest{
私有静态StringBuilder输出=新StringBuilder(“”)
}
您可以通过3种方式执行排序:
有关更多详细信息,请参阅:如果我正确理解了您的场景,这是一种糟糕的测试方法-您的测试应该相互独立。@DmitryZaitsev:是的,我知道。因为我编写了验收测试,而且它非常大,所以我只是尝试将它分解为一些小的测试方法。试着看看Junit是否可以按顺序运行它们,可能是重复的感谢。我真的像你说的那样,把它们作为一个整体来执行。我只是想知道是否有机会这样做。和@FixMethodOrder的工作原理。就像我找的一样。谢谢我不知道it@LouisT哈哈,很好,你们都改变了方法,如果需要的话,你们现在有了自己的解决方案。在使用排序注释时,需要记住的一点是,根据测试的执行方式,它仍然可能出现错误行为。例如,如果使用SureFire,则需要在该配置中定义RunOrder:此外,如果使用可以在测试中引入多线程的执行工具(如Maven),则测试可能会再次无序执行。我不确定这一点,但如果你开始看到意想不到的结果,那就值得记住。这是错误的。JVM返回的方法的顺序在每次运行时可能不同。在文档()中:publicstaticfinalmethodsortersjvm:按照JVM返回的顺序保留测试方法。请注意,JVM的顺序可能因运行而异
@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");
}