2016-03-07 70 views
0

我有一套測試用例。我希望分別在測試用例執行之前和之後調用@BeforeClass & @AfterClass。當我使用JUnit運行套件類時,它會正確調用方法,即setUp()將在測試用例之前調用,而tearDown()將在測試用例完成後調用。但是,當我執行maven來執行測試用例並生成報告時神火它不是調用設置()&拆解()沒有調用@BeforeClass和@AfterClass的套件類

@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); 
     } 
    } 
} 
+1

我沒有看到Surefire如何識別你的測試類,除非它有一個'@ test'註釋。 – djangofan

+0

@djangofan,謝謝,你是對的,surefire不包括suiteclass。有沒有辦法將套件類包含在內? – Nevin

+0

Surefire會在你的'src/test/java'文件夾中自動掃描它。所以,如果你沒有包含Test註解的類,那麼Surefire不會找到它們是有意義的。 – djangofan

回答

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 { 

    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); 
     } 
    } 
} 

嘗試了上述你知道什麼ü沒有錯......

+0

感謝您關注此事。這是行不通的,問題在於surefire忽略了suiteclass,因爲它沒有@test註釋。 – Nevin

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 { 
     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> 

指定Maven的目標來執行SuiteClass

site -Dtest=com.test.testcase.SuiteClass 
0

這並不是因爲TestSuite的不有任何註釋。之所以萬無一失不接你的套件是萬無一失的去尋找測試運行時只選取具有以下命名約定類:

1.Test *

2. *測試

3 *測試用例。

如果按照上述慣例更新套件的名稱,它將工作得很好。

相關問題