【问题标题】:Suite Class not calling @BeforeClass & @AfterClass套件类未调用 @BeforeClass 和 @AfterClass
【发布时间】:2016-03-07 05:05:47
【问题描述】:

我有一套测试用例。我希望在测试用例执行之前和之后分别调用 @BeforeClass 和 @AfterClass 。当我使用 JUnit 运行套件类时,它会正确调用方法,即 setUp() 将在测试用例之前调用,而 tearDown() 将在测试用例完成后调用。但是当我执行 maven 以执行测试用例并使用生成报告时肯定不会调用 setUp() 和 tearDown()

@RunWith(Suite.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@SuiteClasses({test1.class, test2.class})
public class SuiteClass{
    public static WebDriver driver;
    public static String baseUrl;
    public static StringBuffer verificationErrors = new StringBuffer();

    @BeforeClass
    public static void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://localhost:7070/myproject/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @AfterClass
    public static void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }
}

【问题讨论】:

  • 我不知道 Surefire 甚至无法识别您的测试类,除非它有 @test 注释。
  • @djangofan,谢谢,你是对的,surefire 不包括套件类。有没有办法将套件类包含在内?
  • Surefire 会在您的 src/test/java 文件夹中自动扫描它。因此,如果您没有包含 Test 注释的类,那么 Surefire 找不到它们是有道理的。
  • 我在 src/test/java 中有所有的类。你的意思是套件类应该包含 @test 注释以便确保找到它?
  • 啊……你让我上了那个。是的,我猜 Surefire 不知道如何扫描 @SuiteClasses 注释。如果没有更具体的信息,我无法进一步回答。

标签: maven selenium selenium-webdriver junit surefire


【解决方案1】:

终于找到了解决办法:)分享给有需要的人

套件类

@RunWith(Suite.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@SuiteClasses({test1.class, test2.class})
public class SuiteClass{
    public static WebDriver driver;
    public static String baseUrl;
    public static StringBuffer verificationErrors = new StringBuffer();

    @BeforeClass
    public static void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://localhost:7070/myproject/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @AfterClass
    public static void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }
}

在 pom.xml 中输入报告生成

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <outputName>TestReport</outputName>
            </configuration>
        </plugin>
    </plugins>
</reporting>

指定执行 SuiteClass 的 Maven 目标

site -Dtest=com.test.testcase.SuiteClass

【讨论】:

    【解决方案2】:
    @RunWith(Suite.class)
    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
    @SuiteClasses({test1.class, test2.class})
    public class SuiteClass{
        public static WebDriver driver;
        public static String baseUrl;
        public static StringBuffer verificationErrors = new StringBuffer();
    
        @BeforeClass
        public static void setUp() throws Exception {
    
        public static WebDriver driver;
        public static String baseUrl;
        public static StringBuffer verificationErrors = new StringBuffer();
        }
    
        @AfterClass
        public static void tearDown() throws Exception {
            driver.quit();
            String verificationErrorString = verificationErrors.toString();
            if (!"".equals(verificationErrorString)) {
                fail(verificationErrorString);
            }
        }
    } 
    

    试试上面你知道你做错了什么......

    【讨论】:

    • 感谢您对此进行调查。这行不通,问题是surefire 忽略了套件类,因为它没有@test 注释。
    【解决方案3】:

    这不是因为TestSuite 没有任何注释。 Surefire 未选择您的套件的原因是,在查找要运行的测试时,surefire 仅选择具有以下命名约定的类:

    1.测试*

    2.*测试

    3.*测试用例。

    如果您按照上述约定更新套件的名称,它将正常工作。

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 2016-12-03
      • 2016-08-15
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多