2012-10-18 19 views
14

org.junit.rules.MethodRule ve org.junit.rules.TestWatchman kullanımdan kaldırılmıştır. kısmen, https://github.com/junit-team/junit/pull/519:JUnit MethodRule ve TestWatchman neden kullanımdan kaldırıldı?

bir ilginç not oldu

http://junit-team.github.io/junit/javadoc/4.10/org/junit/rules/TestWatchman.html belgeler "Birçok geliştirici ... MethodRule ile sopa ve JUnit ekibi MethodRule için destek kaldırmak için bir planı olmadığını meşru nedenleri vardır": "Kullanımdan kaldırıldı. MethodRule kullanımdan kaldırıldı. Use TestWatcher yerine TestRule uygular." ve bazı örnek kodlar sağlar.

Bunları işaretlemenin ardında yatan sebep nedir? TestWatcher ile onaylanmamış TestWachman arasındaki fark nedir? Bu konuyla ilgili bir özet veya genel bakış için iyi bir linkiniz var mı?

+1

TestWatchman bkz: "MethodRule artık kullanımdan kaldırıldı" Https://github.com/KentBeck/junit/blob/master/doc/ReleaseNotes4.11.md – sversch

cevap

19

Nedeni basittir, TestRuleMethodRule'un yerini alması planlanmıştır. MethodRule 4.7 uygulanan kişiye ve bir yöntemi ile bir arayüz edilmiştir:

Statement apply(Statement base, FrameworkMethod method, Object target) 

FrameworkMethod ilk etapta maruz olmamalıdır (neredeyse) bir iç JUnit sınıfıdır. object, yöntemin çalıştırılacağı nesnedir; örneğin, yansımayı kullanarak testin durumunu değiştirebilirsiniz.

TestRule 4.9 tanıtılan, ancak,:

Statement apply(Statement base, Description description) 

Description test açıklamasını içeren bir değişmez POJO olup. Bir test içindeki durumu değiştirmenin yolu, TestRule kullanarak test içinde doğru şekilde kapsüllenmektir. Tamamen daha temiz bir tasarım.

TestWatchman(MethodRule) ve TestWatcher(TestRule) arasındaki özel fark, TestWatcher'ın daha iyi hata işleme sahip olması dışında, en düşüktür, bu nedenle bu tercih kullanılmalıdır. Her ikisi de succeeded(), failed(), starting(), finished() gibi geçersiz kılma yöntemlerine sahiptir.

public static class WatchmanTest { 
    private static String watchedLog; 

    @Rule 
    public TestWatcher watchman= new TestWatcher() { 
    @Override 
    protected void failed(Throwable e, Description description) { 
     watchedLog+= description + "\n"; 
    } 

    @Override 
    protected void succeeded(Description description) { 
     watchedLog+= description + " " + "success!\n"; 
    } 
    }; 

    @Test 
    public void fails() { 
    fail(); 
    } 

    @Test 
    public void succeeds() { 
    } 
} 

TestWatcher(TestRule) overidden yöntemlerinde istisnalar işler. İstisnalar atılırsa, testin yerine getirilmesinden sonra test yöntemi başarısız olur.

fazla bilgi için, JUnit sürümü 4.11 için sürüm notlarına göre TestWatcher ve

+1

'a bakın, bu yüzden neden MethodRule JUnit 4.11'de artık kullanılmıyor? – BrunoJCM

+1

Yine de bazı kullanım durumları olduğu için kullanımdan kaldırıldı: bkz. Https://github.com/junit-team/junit/pull/519 –

İlgili konular