2011-06-22 61 views
6

我想編寫一個測試,以多種方式執行安裝程序,但希望它們產生相同的輸出。基本上像Junit多重設置和單一測試

@Before 
public void setUp1(){ 
    obj.addDataThisWay(data); 
} 

@Before 
public void setUp2(){ 
    obj.addDataThatWay(data); 
} 

@Test 
public void testResult(){ 
    assertEquals(obj.getResult(),1); 
} 

我想要的測試運行兩次,一爲setUp1()->testResult(),另一個用於setUp2()->testResult()這可能嗎?

+0

TestNG中您可以使用@dataProvider註釋,並設置這樣做的方式,傳遞obj的兩個不同的實例。但我不知道junit等值是什麼。 – sblundy

回答

6

不是我所知。您必須將其轉換爲兩個單獨的測試(並且如果您願意,可以將斷言提取爲常用的,私有的,非@Test方法),或者您可以使用parameterized tests

+0

我結束了參數化測試。謝謝 –

4
public void testWithSetup1() { 
    callSetup1Here(); 
    ..... 
} 

public void testWithSetup2() { 
    callSetup2Here(); 
    ..... 
} 

我不認爲有任何其他的方式來做你在問什麼。

2

我只是猜測現在,但你不能使用繼承?用你的testResult()方法創建抽象類,並使用setUp()方法創建具體的類?

+0

非常聰明!我只是做了一個簡單的測試,看起來確實有效。 – MatrixFrog

1

隨着TestNG,你可以使用組此:

@BeforeMethod(groups = "g1") 
public void setUp1(){ 
    obj.addDataThisWay(data); 
} 

@BeforeMethod(groups = "g2") 
public void setUp2(){ 
    obj.addDataThatWay(data); 
} 

@Test(groups = { "g1", "g2" }) 
public void testResult(){ 
    assertEquals(obj.getResult(),1); 
} 

如果你問TestNG的運行組 「G1」,它將運行設置1() - > TestResult中。如果你運行組「g2」,它將運行setUp2() - > testResult。

此外,像上面說的評論者,可以使用數據提供不同的參數傳遞給您的測試方法:

//This method will provide data to any test method that declares that its Data Provider 
//is named "test1" 
@DataProvider(name = "test1") 
public Object[][] createData1() { 
return new Object[][] { 
    { "Cedric", new Integer(36) }, 
    { "Anne", new Integer(37)}, 
}; 
} 

//This test method declares that its data should be supplied by the Data Provider 
//named "test1" 
@Test(dataProvider = "test1") 
public void verifyData1(String n1, Integer n2) { 
System.out.println(n1 + " " + n2); 
} 
0

JUnit Parameterized可以做的伎倆。

使用參數應該看起來像修改代碼在原題如下:

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

import java.util.Arrays; 
import java.util.Collection; 

@RunWith(Parameterized.class) 
public class MyTest { 

    private Object obj; 

    public MyTest(boolean addDataThisWay) { 
     if (addDataThisWay) 
      obj.addDataThisWay(data); 
     else 
      obj.addDataThatWay(data); 
    } 

    @Parameters 
    public static Collection<Object[]> differentTestSettings() { 
     return Arrays.asList(new Object[][]{ 
      {true}, 
      {false} 
     }); 
    }  

    @Before 
    public void setUp(){ 
     // any additional setup required 
    } 

    @Test 
    public void testResult(){ 
     assertEquals(obj.getResult(),1); 
    } 
}