2011-06-22 11 views
6

いくつかの方法でセットアップを実行するが、同じ出力を生成するテストが必要です。基本的には複数のセットアップと単一のテストをテストする

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

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

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

ように私はそれがsetUp2()->testResult() 2回実行するテスト、setUp1()->testResult()用、他方が可能ということですしたいですか?

+0

をあなたは@dataProviderアノテーションを使用して、セットアップがobjの2つの異なるインスタンスに渡して、そのように行っている可能性。しかし、私はジャニット相当物が何であるか分からない。 – sblundy

答えて

6

私には分かりません。これを2つの別々のテストにする必要があります(必要ならば、@Testメソッドにアサーションを抽出する)、またはparameterized testsを使用することができます。

+0

私はparamterizedテストに終わった。ありがとうございました –

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

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

あなたが求めていることを行うための他の方法はないと思います。

2

私は今推測していますが、継承を使用することはできませんか?あなたのtestResult()メソッドと抽象クラスを作成し、具体的なクラスをsetUp()メソッドのそれぞれで作成しますか?

+0

非常に賢い!私はちょうど簡単なテストをしました、そして、これは本当にうまくいくようです。 – MatrixFrog

1

TestNGで、あなたはこのためのグループを使用します。あなたがグループ "G1" を実行するように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); 
} 

は、それがSETUP1を実行します() - > 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は、トリックを行うことができます。パラメータ化を使用して元の質問にコードを変更する

は、次のようになります。TestNGのでは

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); 
    } 
} 
関連する問題