2012-07-22 22 views
7

Farklı uygulamacılar tarafından uygulanacak bir arabirim MyInterface yazdım.Genel JUnit test sınıfı

Ayrıca, tüm uygulayıcıların uygulamalarını test etmek için kullanabilmesi gereken jenerik test yöntemlerini içeren bir sınıf MyInterfaceTest yazdım.

Sadece JUnit testi olarak nasıl çalışacağını bilmiyorum.

Şu anda, böyle bir şey var: Her uygulama başlatma çok zaman alır, çünkü

public class MyInterfaceTest { 
    private static MyInterface theImplementationToTest = null; 

    @BeforeClass public static void setUpBeforeClass() throws Exception { 
       // put your implementation here: 
     theImplementationToTest = new Implementation(...); 
    } 

    @AfterClass public static void tearDownAfterClass() throws Exception { 
     theImplementationToTest = null; 
    } 

    @Test public void test1() { /* uses theImplementationToTest */ }  
    @Test public void test2() { /* uses theImplementationToTest */ }  
} 

ben statik yöntemi setUpBeforeClass kullanmak, bu yüzden tüm testlerde bir kez başlatmak istiyoruz.

Testin bu sürümünde, uygulayıcılar setUpBeforeClass kodunu değiştirmek ve kendi uygulamalarını koymak zorundadırlar.

MyInterfaceTest yazmanın başka bir yolu olduğundan emin olun, böylece uygulayıcılar yalnızca bir parametre mi yoksa bir parametre göndermeli ve kodu değiştirmemelidir. Ancak, JUnit'te çalışmasını sağlamak için yeterince deneyimim olmadı. Bana bunu nasıl yapacağımı gösterir misin?

cevap

6

Alt sınıfı yalnızca önceki sınıf yöntemine sahip olabilir ve tüm testleri devralabilirsiniz.

import org.junit.*; 

public abstract class MyInterfaceTest { 
    protected static MyInterface theImplementationToTest = null; 

    @AfterClass 
    public static void tearDownAfterClass() throws Exception { 
     theImplementationToTest = null; 
    } 

    @Test 
    public void test1() { /* uses theImplementationToTest */ 
    } 

    @Test 
    public void test2() { /* uses theImplementationToTest */ 
    } 
} 

Normalde, yöntem soyut uygulamak için gerekli alt sınıfları yapacak:

import org.junit.*; 

public class ImplementingClassTest extends MyInterfaceTest { 

    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 
     // put your implementation here: 
     theImplementationToTest = new MyInterfaceImpl(); 
    } 

} 

Bu gibi göz yazıyoruz soyut sınıf yapar. Statik bir kurulum yöntemi olduğu için burada yapamam. (Ek olarak, çoğu zaman bir anti-desen olduğu için uzun sürmemesi için örneklemelerin yeniden düzenlenmesini isteyebilirsiniz).

-3

junit-4.10.jar kutu adlarını indirip projenize eklemelisiniz. Daha sonra MyInterfaceTest sınıfınızın TestCase sınıfını, public class MyInterfaceTest extends TestCase gibi bırakmasına izin verin.

+1

Bu sorun orijinal sorunu nasıl çözer? –

+0

Orijinal sorun nedir? –

+0

Statik kurulum/düşürme, alt sınıflara göre farklılık gösteren uygulama ile nasıl yeniden kullanılır. Cevabımda açıklandığı gibi. –