2013-08-30 34 views
10

Karmaşık bir kurucuya (çok sayıda parametreye sahip) sahip bir sınıfı test ediyorum.JMockit alay kurucu

public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String  obsBatId) { 

    super(webForm, dataEntryModel, obsBatId); 
..... 

yapıcı sonra daha da karmaşık bir hal alır süper yapıcısını çağırır: Yapıcı gibi üç argüman alır. JMockit'i kullanarak, sınıfın bir örneğini nasıl oluşturabilirim ve kurucuları gerçekten çağırmadan bir yöntemi nasıl test edebilirim? Ben JMockit'e yeni geldim, herhangi bir yardım takdir edilecektir.

Teşekkürler!

cevap

12

Sizi doğru anladıysam, sınıfı alaylı bir kurguyla sınamak istiyorsunuz. Bu, üretim kodunu en saf haliyle test etmediğiniz için test etmek için iyi bir yaklaşım değildir. Bununla birlikte, her şey kurallara uygun değil, öyle değil mi? :) Eğer ısrar edersen, JMock bunu yapmana izin verecek. Sadece kurucu ile dalga geçebilir ve diğer yöntemleri test edebilirsiniz. Alay kurucuları JMockIt project site'da belgelenmiştir.

Üretim kodu:

// src/main/java/pkg/SomeClass.java 
public class SomeClass { 
    public static void main(String[] args) { 
     new SomeClass("a", 2); 
    } 

    public SomeClass(String a, Integer b) { 
     System.out.println("Production constructor called"); 
    } 
} 

Mock kodu:

// src/test/java/pkg/SomeMock.java 
import mockit.Mock; 
import mockit.MockUp; 

public class SomeMock extends MockUp<SomeClass> { 
    @Mock 
    public void $init(String a, Integer b) { 
     System.out.println("Mock constructor called"); 
    } 
} 

Testi kodu:

// srce/test/java/pkg/SomeTest.java 
import org.junit.Test; 

public class SomeTest { 

    @Test 
    public void test() { 
     new SomeMock(); 
     new SomeClass("a", 2); 
    } 

} 

Koşu İşte

kendinizi deneyebilirsiniz hızlı bir gösteri üretim Kod Production constructor called'u yazdıracaktır, ancak test altında çalıştırıldığında Mock constructor called yazdıracaktır.

+0

Cevabınız için teşekkürler. Denerim. – userx

+0

'Eğer sizi doğru anladıysam bir sınıfı alaylı bir kurucuyla test etmek istersiniz. Bu test için iyi bir yaklaşım değil çünkü üretim kodunu en saf haliyle test etmiyorsunuz. 'Tamamen katılmıyorum. Ünite testi (beyaz kutu testi - hangi JMockit için kullanılır) en saf haliyle bireysel birimleri test etmektir. Karmaşık bir kurucu olmayan belirli bir birimi test ediyorsanız, o zaman bunu yürütmesine izin vermek, birim testi yapmaya çalıştığınızda yapmak için son derece kötü olan kara kutu testidir. – searchengine27

+0

ancak yapıcınızı ($ init() yönteminin içinde) alay ederken nesnenin alanlarını nasıl belirlersiniz? – supertonsky