2012-10-25 90 views
1

我有2種試驗方法之一測試,並且我需要具有不同配置JUnit的:運行具有不同配置

myTest() { 
    ..... 
    ..... 
} 

@Test 
myTest_c1() { 
    setConf1(); 
    myTest(); 
} 

@Test 
myTest_c2() { 
    setConf2(); 
    myTest(); 
} 

//------------------ 

nextTest() { 
    ..... 
    ..... 
} 

@Test 
nextTest_c1() { 
    setConf1(); 
    nextTest(); 
} 

@Test 
nextTest_c2() { 
    setConf2(); 
    nextTest(); 
} 

我不能從一個配置運行它們兩者(如在下面的代碼),因爲我需要運行它們tosca執行的單獨方法。

@Test 
tests_c1() { 
    setConf1(); 
    myTest() 
    nextTest(); 
} 

我不想寫這2種方法來運行每個測試,我該如何解決這個問題?

首先我想編寫自定義註釋

@Test 
@RunWithBothConf 
myTest() { 
    .... 
} 

但也許有這方面的任何其他解決辦法?

+0

爲什麼你想寫這個測試? –

回答

3

怎麼樣使用Theories

@RunWith(Theories.class) 
public class MyTest{ 

    private static enum Configs{ 
    C1, C2, C3; 
    } 

    @DataPoints 
    public static Configs[] configValues = Configs.values(); 

    private void doConfig(Configs config){ 
    swich(config){...} 
    } 

    @Theory 
    public void test1(Config config){ 
     doConfig(config); 

     // rest of test 
    } 

    @Theory 
    public void test2(Config config){ 
    doConfig(config); 

     // rest of test 
    } 

不確定爲什麼要關閉格式。

0

你現在擁有它的方式對我來說似乎很好。你沒有複製任何代碼,每個測試都很清晰易懂。

+1

但是當涉及到5個測試和5個配置時,我只有25個方法用於運行測試。所以我決定讓它更優化 –

1

這裏是我會怎麼處理它:

  • 創建兩個測試類
  • 第一類配置到CONF1,但使用@Before屬性觸發設置
  • 第二類擴展了第一,但覆蓋配置方法

在下面的示例中,我有一個成員變量conf。如果沒有配置運行,它將保持其默認值0. setConf1現在爲Conf1Test類中的setConf,該類將此變量設置爲1. setConf2現在爲setConf,類別爲Conf2Test

下面是主要的測試類:

public class Conf1Test 
{ 
    protected int conf = 0; 

    @Before 
    public void setConf() 
    { 
     conf = 1; 
    } 
    @Test 
    public void myTest() 
    { 
     System.out.println("starting myTest; conf=" + conf); 
    } 

    @Test 
    public void nextTest() 
    { 
     System.out.println("starting nextTest; conf=" + conf); 
    } 
} 

和第二測試類

public class Conf2Test extends Conf1Test 
{ 
    // override setConf to do "setConf2" function 
    public void setConf() 
    { 
     conf = 2; 
    } 
} 

如果我在配置IDE來運行包我得到以下輸出所有測試:

starting myTest; conf=1 
starting nextTest; conf=1 
starting myTest; conf=2 
starting nextTest; conf=2 

我想這給你什麼。每個測試只需要編寫一次。每個測試運行兩次,一次使用conf1,一次使用conf2

1

我在一堆測試用例中遇到類似的問題,其中某些測試需要使用不同的配置運行。現在,在你的情況下,'配置'可能更像設置,在這種情況下,這可能不是最好的選擇,但對我來說它更像是一個部署模型,因此它很適合。

  1. 創建一個包含測試的基類。
  2. 用代表不同配置的基類擴展。
  3. 當您執行每個派生類時,基類中的測試將與其自己的類中的配置設置一起運行。
  4. 要添加新的測試,只需將它們添加到基類。
相關問題