JUnit

2012-10-22 23 views
15

'daki 'önceki' yöntemden bireysel testi hariç tut Benim test sınıfımdaki tüm testler, her bir testin gerçekleştirilmesinden önce bir 'önce' yöntemini (JUnit'in @Before ile açıklamalı) yürütür.JUnit

Bu yöntemin uygulanmaması için belirli bir sınava ihtiyacım var.

Bunu yapmanın bir yolu var mı?

cevap

9

Maalesef bu mantığı kodlamanız gerekiyor. JUnit'in böyle bir özelliği yok. çalışan "önce" gerektiren testleri içeren bir ve ikinci bu gerektirmeyen testleri içerir:

  1. Sadece ayrı test durumu 2'ye test durumları: Genellikle 2 çözümler var.
  2. Kendi testinizi uygulayın ve testinizi kullanmak için notunuzu ekleyin. Kendi notunuzu oluşturun @RequiresBefore ve bu ek açıklama ile buna ihtiyaç duyan testleri işaretleyin. Test koşucusu, ek açıklamaları ayrıştırıp "önce" yönteminin çalıştırılıp çalıştırılmayacağına karar verecektir.

İkinci çözüm daha açık. Birincisi daha basit. Bunlardan birini seçmeniz size kalmış.

15

İki iç sınama sınıfına sahip olmanızı sağlamak için @Enclosed runner'ı kullanmayı düşünün. Gerekli olan @Before yöntemiyle, diğeri olmadan.

Enclosed

@RunWith(Enclosed.class) 
public class Outter{ 

    public static class Inner1{ 

    @Before public void setup(){} 

    @Test public void test1(){} 
    } 

    public static class Inner2{ 

    // include or not the setup 
    @Before public void setup2(){} 

    @Test public void test2(){} 
    } 

} 
19

Bir TestRule ile yapabilirsiniz. Sen TestRule geçerli yöntemde, o zaman bazı açıklamalar bir açıklama ile daha önce atlamak isteyen testi işaretleyin ve, o ek açıklaması için test edebilirsiniz ve ne istediğinizi böyle bir şey yapmak:

public Statement apply(final Statement base, final Description description) { 
    return new Statement() { 
    @Override 
    public void evaluate() throws Throwable { 
     if (description.getAnnotation(DontRunBefore.class) == null) { 
     // run the before method here 
     } 

     base.evaluate(); 
    } 
    }; 
} 
+0

Güncelleştirilmiş link: https://github.com/junit-team/junit/wiki/Rules. Ayrıca bkz .: http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen

+4

@Before ifadelerini TestRule içinden kolayca yürütmenin bir yolu var mı? // // burada daha önce yürüttüğünüz metodu çalıştırmak için en basit yaklaşımın ne olduğunu merak ediyorum. – loeschg

0

Ayrıca, test durumu içinde @Before kurulumunda ne yapıldığını çözerek de bunu çözebilirsiniz. Bu

@Before 
public void setup() { 
    TestDataSetupClass.setupTestData(); 
} 

@Test 
public void testServiceWithIgnoreCommonSetup() { 
    TestDataSetupClass.unSet(); 
    //Perform Test 
} 

burada çözümleri için lehte ve aleyhte olacak, bu görünebilir nasıl. Bunun için minör con, gereksiz ayar ve un-ayar adımı döngüsüdür. Ancak, yüzlerce kişinin sadece bir test durumu için yapması ve kendi kendini AOP yazma ya da çoklu iç test sınıflarını sürdürmesi önlenmesi gerekiyorsa iyi gider.