2011-06-22 27 views
6

Kur'u birkaç şekilde gerçekleştiren, ancak aynı çıktıyı üretmelerini bekleyecek bir test yazmak istiyorum. Temelde ben iki kez çalıştırmak için test, setUp1()->testResult() için bir tane istiyorumJunit çoklu kurulum ve tek test

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

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

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

gibi, setUp2()->testResult() için diğeri olması mümkün mü?

+0

Eğer @DataProvider ek açıklama kullanabilir ve kurulum obj iki farklı durumlarda geçen bu şekilde yapmış . Ama cemaat eşdeğerinin ne olacağını bilmiyorum. – sblundy

cevap

6

Bilgim için değil. Ya bunu iki ayrı sınamaya dönüştürmelisiniz (ve isterseniz istekleri ortak, özel, @Test yöntemine ayıklayın) veya parameterized tests'u kullanabilirsiniz.

+0

Paramterize testlerle sonuçlandım. teşekkür ederim –

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

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

Sorduğun şeyi yapmanın başka bir yolu olduğunu sanmıyorum.

2

Şimdi tahmin ediyorum, ama miras kullanamaz mısın? testResult() yönteminiz ve setUp() yöntemlerinden her birine sahip beton sınıfları ile soyut bir sınıf oluşturmak için?

+0

Çok akıllı! Basit bir test yaptım ve bu gerçekten işe yarayacak gibi görünüyor. – MatrixFrog

1

TestNG ile, bunun için grupları kullanırsınız: Eğer grubu "g1" çalışmasına TestNG sorarsanız

@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); 
} 

, bu SETUP1 çalışacağı() -> testResult. "G2" grubunu çalıştırırsanız, setUp2() -> testResult çalışır. yorumcu Yukarıda dediğim gibi

Ayrıca, test yöntemine farklı parametreler geçirmek için veri sağlayıcıları kullanabilirsiniz:

//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 hile yapabilirsiniz. gibi görünmelidir parametreli kullanarak özgün söz konusu kodunun değiştirilmesi

aşağıdaki:

TestNG olarak
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); 
    } 
}