2016-03-24 27 views
0

Testler üretmek ve çalıştırmak mümkün müdür?Geb JUnit4 otomatik üretim testleri

Örn. Bir 404 sayfasına ve bazı diğer testlere işaret edip etmediklerini kontrol etmek istediğiniz bir URL listesi. Her bağlantı için ayrı bir test oluşturmak istemiyorum. Bu çok iş olurdu.

Bu mümkün değilse, bir testten diğerine işaret etmek mümkün mü ve diğeri ilk testin devam edememesi durumunda başarısız mı?

Testlerim için Groovy with Gebish, Gradle ve JUnit4 kullanıyorum.

cevap

1

Aradığınız şeyin, testler değil, parameterized testleri olduğunu düşünüyorum. Eğer sizi doğru anlarsam, çok sayıda farklı şey için aynı testini çalıştırmak istersiniz.

Parametreli bir testte, verileri döndüren ve testi çalıştırmak için JUnit'e Parameterized runner'ı kullanmasını söyleyen statik bir yöntem bildirerek bunu yaparsınız. Her bir test sınıfı daha sonra, test yönteminin erişebileceği test verileri olarak bir argüman ile başlatılır.

@RunWith(Parameterized.class) 
public class FibonacciTest { 
    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {  
       { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } 
      }); 
    } 

    private int fInput; 
    private int fExpected; 

    public FibonacciTest(int input, int expected) { 
     fInput= input; 
     fExpected= expected; 
    } 

    @Test 
    public void test() { 
     assertEquals(fExpected, Fibonacci.compute(fInput)); 
    } 
} 

Alternatif bir yaklaşım theories olacaktır. Bir teori ile test verilerini test sınıfında @Datapoint ile açıklanmış farklı statik alanlar olarak gömüyorsunuz ve her bir test metodu her veri noktası için tekrar tekrar denir ve spesifik veri noktası bir argüman olarak iletilir. Yine, özel Ayrıca bir sürü hayatınızı kolaylaştıracak ve [Spock] kullanabilir

@RunWith(Theories.class) 
public class UserTest { 
    @DataPoint 
    public static String GOOD_USERNAME = "optimus"; 
    @DataPoint 
    public static String USERNAME_WITH_SLASH = "optimus/prime"; 

    @Theory 
    public void filenameIncludesUsername(String username) { 
     assumeThat(username, not(containsString("/"))); 
     assertThat(new User(username).configFileName(), containsString(username)); 
    } 
} 
+0

gerçekleşmesi için koşucu ... (https://github.com/spockframework/spock) ve sahip [ test parametrelemesi için destek] (http://spockframework.github.io/spock/docs/1.0/data_driven_testing.html). – erdi

İlgili konular