2011-04-09 63 views
1

我想在任何測試開始運行之前爲我的整個測試套件設置數據。我明白Maven一個接一個地運行測試而不是套件,所以我不能使用@SuiteClasses。另外我不想通過dbunit-maven-plugin創建數據集,數據集必須通過REST創建。有沒有一種方法可以將特定的類作爲Maven預集成測試和後整合測試的一部分來安裝和清理?之前的測試套件開始和結束後即拆除JUnit Test Suite:在測試開始運行之前首先創建數據集的方法

例如

public class TestInit 
{ 
    public void setUp() 
    { 
     //Data setup 
    } 

    public void tearDown() 
    { 
     //Data clean up 
    } 
} 

使安裝運行。或者我可以運行2個獨立的類,如TestInitSetup和TestInitTearDown?

+0

爲什麼你不想使用DbUnit,你可以給我一些解釋? – 2011-04-10 00:22:24

+0

我有很多數據需要種子,通過提供一個xml數據集很麻煩。我有REST資源端點,它接受一個相當簡單的json負載並將數據插入到數據庫中。這只是一個方便的問題。 – Prasanna 2011-04-10 22:20:54

回答

1

如果您無法在JUnit中找到解決方案,TestNG支持@BeforeSuite和@AfterSuite,這似乎是您想要的。

4

Here是基於規則的解決方案。它可能是有用的。

的語法如下:

public class SimpleWayToUseDataSetTest { 
    @Rule 
    public DataSetRule rule = new DataSetRule(); // <-- this is used to access to the testVectors from inside the tests 

    public static class MyDataSet extends SimpleTestVectors { 
     @Override 
     protected Object[][] generateTestVectors() { 
      return new Object[][] { 
        {true, "alpha", new CustomProductionClass()}, // <-- this is a testVector 
        {true, "bravo", new CustomProductionClass()}, 
        {false, "alpha", new CustomProductionClass()}, 
        {false, "bravo", new CustomProductionClass() } 
      }; 
     } 
    } 

    @Test 
    @DataSet(testData = MyDataSet.class) // <-- annotate the test with the dataset 
    public void testFirst() throws InvalidDataSetException { // <-- any access to testData may result in Exception 
     boolean myTextFixture = rule.getBoolean(0); // <-- this is how you access an element of the testVector. Indexing starts with 0 
     String myAssertMessage = rule.getString(1); // <-- there are a couple of typed parameter getters 
     CustomProductionClass myCustomObject = (CustomProductionClass) rule.getParameter(2); // <-- for other classes you need to cast 
     Assert.assertTrue(myAssertMessage, true); 
    } 
} 
相關問題