2009-10-29 26 views
8

JUnit ile yazılmış çok sayıda entegrasyon testine sahibiz, ancak şu anda 4.4 ile çalışıyoruz. Bunlardan birkaçı, sınıftaki tüm testler tamamlandıktan sonra (bazı ortak kaynakları serbest bırakmak için) çalışan bir yırtılmaDown yöntemine gereksinim duyar.Üçüncü sınıfta sınıf teardown?

Bunun, @AfterClass (org.junit) ile 4 numaralı bölümde yapılabildiğini görüyorum. Bununla birlikte, bunu TestCase (junit.framework. *) 'I genişleten mevcut 3 testine karıştırmak işe yaramıyor. [BTW henüz bir göç aracı var mı? Soru 264680 bir yıl önce belirtilmemişti.]

Bu tür bir şey için junit.extensions.TestSetup kullanmanın sözünü gördüm. Kısa testim işe yaramadı. Herhangi bir örnek?

+0

elle dönüştürmek ve bütün testleri doğrulamak için şu anda zamanım (ve JUnit 4 ek açıklamalar kullanma konusunda, ilgili tüm geliştiriciler tren) değil varsayalım, ama Sadece 3. sınıfta bir AfterClass eşdeğeri gerektiren birkaç sınıfa hitap etmek istiyorum. –

cevap

18

Cevabı kendi sorumu buldum :) Bu soruyu göndermeden önce kısaca denedim, ama benim için çalışmadı. Ama şimdi, test çerçevemizin cihaza varsayılandan farklı bir şekilde giriş yapması nedeniyle, aşağıdaki çözümde ihtiyaç duyulan "paket" yöntemini aramadığını fark ettim. Eclipse'de, bir Test/TestCase'i doğrudan yürütmek için birleştirilmiş koşucu koşucuyu kullanırsam, iyi çalışır.

Bu kurulum/yırtığın bir yolu, jitit 3'te sınıf başına bir kez TestSuite kullanmaktır. İşte junit.org üzerinde bir örnek: Is there a way to make setUp() run only once?

public static Test suite() { 
    return new TestSetup(new TestSuite(YourTestClass.class)) { 

     protected void setUp() throws Exception { 
      System.out.println(" Global setUp "); 
     } 
     protected void tearDown() throws Exception { 
      System.out.println(" Global tearDown "); 
     } 
    }; 
} 
+0

Bunu Android'de mi çalıştırdınız? Tam olarak aynı koda sahibim ama ClassNotFound istisnası alıyorum. Bunu zaten yaptın mı? YourTestClass TestCase'i uzatıyor mu? –

+0

Testimi bu kodla şimdi yürütebilirim, ancak suite() yöntemi çağrılmıyor gibi görünüyor. Bu yönteme böyle bir çağrı yapmak için ne yaptınız? JUnit (ya da IDE) 'nize tek bir JUnit3 stili test sınıfını çalıştırmasını söylerseniz ve bu sınıfa bir' Test '(veya alt sınıfa geri dönen bir genel statik 'suite() yöntemine sahipse, otomatik olarak –

+0

@FelipeMosso olarak adlandırılır. testin ardından, paketi oluşturmak için 'suite()' yöntemi çağrılır. Ancak, el yordamı kendiniz oluşturursanız, suite() yönteminin kullanıldığından emin olmanız gerekir (bir sınıfa giren "TestSuite" yapıcısını kullanarak). – NamshubWriter

3

JUnit 4'te, test sınıfınızın TestCase ürününü genişletmesi gerekmez. Bunun yerine, test sınıfınızın adının *Test ile eşleştiğinden ve her test yönteminin @Test ile açıklamalı olduğundan emin olmalısınız. Bu değişiklikleri yapmayı denediniz mi ve ardından @AfterClass ek açıklamalarını ilgili yönteme eklediniz mi?

Şu anda TestCase numaralı telefondan şu anda kullanabileceğiniz birçok işlevselliğin yerini alacak ek açıklamaları var.

+0

Sınıf çapında bir teardown almaya çalışırken, aynı zamanda bir sınıfı sadece 4 takıma dönüştürmeye çalışıyorum. Eclipse/komut satırı olarak henüz pek şansa sahip olmamak, daha sonra çalıştırılacak hiçbir testim olmadığını düşünüyor. –

+0

Cevabımı güncelledim, daha önce verdiğim tavsiyeler tamamen yanlıştı ve cehenneme indirgenmeyi hak ettim. Lütfen yukarıdaki talimatları izleyin ve tekrar deneyin. –

İlgili konular