2013-03-13 156 views
3

我想在遊戲中使用參數化的JUnit測試!框架(1.2.5)應用程序。在遊戲中使用參數化的JUnit測試!框架

這是我非常簡單的測試例子:

import java.util.Arrays; 
import java.util.List; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

import play.test.FunctionalTest; 

@RunWith(Parameterized.class) 
public class ParameterizedExampleTest extends FunctionalTest { 

    private int i; 

    @Parameters 
    public static List<Object[]> parameters() { 
     return Arrays.asList(new Object[][] {{1},{2},{3}}); 
    } 

    public ParameterizedExampleTest(int i) { 
     this.i = i; 
    } 

    @Test 
    public void someTest() { 
     System.out.println("i is " + i); 
    } 
} 

當我運行測試,我得到一個IllegalArgumentException告訴我,「測試類只能有一個構造函數」。我完全同意,因爲其中有一個@RunWith(PlayJUnitRunner.class)註釋和PlayJUnitRunner有一個構造函數。

任何幫助歡迎!

回答

1

我發現了一個相當不錯的解決方案:

import java.util.Arrays; 
import java.util.List; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameter; 
import org.junit.runners.Parameterized.Parameters; 

import play.test.FunctionalTest; 

@RunWith(Parameterized.class) 
public class ParameterizedExampleTest extends FunctionalTest { 

    @Parameter(0) 
    public int i; 

    @Parameters 
    public static List<Object[]> parameters() { 
     return Arrays.asList(new Object[][] {{1},{2},{3}}); 
    } 

    @Test 
    public void someTest() { 
     System.out.println("i is " + i); 
    } 
} 

你必須標記與@Parameter(...)註釋和參數數組中的參數的數量的參數。不需要構造函數,因此它可以在遊戲中順利運行。缺點:你將需要JUnit 4.11,因爲這個特性並沒有在4.10中實現,這就是play(1.2.5)自帶的東西。

+0

太棒了!剛剛有同樣的問題,你救了我的生命;) – mkurz 2013-12-15 22:51:17