2016-02-04 114 views
1

我想參數化從queue以前在我的一個src/main類中設置的JUnit4測試。這是我到目前爲止已經完成,有一個爲測試套件(MigratorTestSuite沒有測試參數化JUnit4測試

@RunWith(Suite.class) 
@Suite.SuiteClasses({ParameterizedTest.class}) 
public class MigratorTestSuite { 
    @BeforeClass 
    public static void setUp() throws SAXException, ParserConfigurationException, GitAPIException, IOException { 
     Migrator.getReady(); 
    } 

@AfterClass 
public static void tearDown() throws SQLException { 
    DatabaseManager.closeConnections(); 
    RepositoryManager.closeRepository(); 
} 

}

和A類ParameterizedTest在那裏我搞清楚如何運行parameterized JUnit test看起來作爲一類如下:

@RunWith(Parameterized.class) 
public class ParameterizedTest { 

    @Parameterized.Parameters(name="whatever") 
    public static Queue<Deque<String>> data(){ 
     return TestCasesConstructor.testCasesQueue; 
    } 

    private Deque<String> scenario; 

    public ParameterizedTest(Queue<Deque<String>> q){ 
     scenario = q.peek(); 
    } 

    @Before 
    public void initialize() throws ParserConfigurationException, IOException, SQLException, ClassNotFoundException { 

     System.out.println("--- Preparing database for running scripts"); 
     DatabaseManager.dropDatabase(); 
     DatabaseManager.createDatabase(); 
    } 

    @Test 
    public void testPlainMigration() throws Exception { 
     Assert.assertTrue(Migrator.runScenario(this.scenario)); 
    } 

    @After 
    public void after() throws SQLException { 
     DatabaseManager.closeConnections(); 
     TestCasesConstructor.testCasesQueue.remove(); 
    } 
} 

當我執行mvn clean install test -Dtest=MigratorTestSuite的結果是,它並沒有發現任何測試,當我調試它,它表明:

沒有測試在org.junit.internal.requests.FilterRequest.getRunner

我在做什麼錯找不到匹配的數據有任何參數從org.junit.runner.Request ?我應該在TestNG中更好地實現它嗎?我對Junit非常陌生。

回答

0

你可以試試這個:

mvn clean install -Dtest=MigratorTestSuite test 
0

data方法應該返回對象數組的集合,即Collection<Object[]>。每個對象數組都是一個測試向量,包含例如輸入字符串和預期結果。

測試類構造函數應該將測試向量的元素作爲參數。在上面的例子中,它需要一個字符串和一個結果參數,你通常會將其存儲在一個字段中,以便實際的測試用例可以使用它。對於每個測試向量,都會創建一個新的測試類實例。

就你而言,你似乎想要使用一系列場景作爲參數。

因此,你的數據的方法,應返回scenario- 陣列的集合(具有長度爲1的每個陣列),以及你的構造要消耗單個方案(而不是完整的集合;所以沒有必要到'偷看'周圍)。