2016-03-18 25 views
1

Testler çalışırken statik yöntem çağrılarını yok saymanın bir yolunu arıyorum.java - sınamalar çalışırken yalnızca bir sınıfı veya yöntemi yok sayma

Test koşum robolektriktir. Bir test yürütülürken yürütmek istemediğim bazı yöntemlerim var. Kullanabileceğim herhangi bir açıklama veya teknik var mı? Ben Test conditionals, mesela zorunda kalmamak istiyorum

public class FabicTrackerUtils { 

    private static void trackLoginActivity(LoginEvent loginEvent) { 
     //... 
     Answers.getInstance().logLogin(loginEvent); 
    } 

    private static void trackPaymentsActivity(PaymentEvent paymentEvent) { 
     //... 
     Answers.getInstance().logLogin(paymentEvent); 
    } 
} 

i basitçe göz ardı ihtiyaç

My yardımcı sınıf şöyle Üretim kodlarımın her yerinden if(!robolectricTest).

+2

Bunun bana önerir hiçbir günlüğü yapar testlerinizde Answers' örneği 'sahte enjekte yerine sahip olması gerektiğidir statik bir 'Answers.getInstance()'. –

cevap

4

@Louis'in yorumunu incelemek için, bağımlılık enjeksiyonunu kullanmanız gerekir, ör. yöntem, bu gibi bir imza sahip olarak:

public class FabicTrackerUtils { 
    private Answers answers; 

    public FabicTrackerUtils(Answers answers) { 
     this.answers = answers; 
    } 

    private static void trackLoginActivity(LoginEvent loginEvent) { 
     //... 
     answers.logLogin(loginEvent); 
    } 
} 

Bu varsayarak: Answers örneği bir tekil benzer, çünkü

private static void trackLoginActivity(LoginEvent loginEvent, Answers answers) { 
    //... 
    answers.logLogin(loginEvent); 
} 

bir alternatif, örneğin bir örneği değişken olarak nesne enjekte etmektir Test, FabicTrackerUtils örneğini oluşturabilir ve alaylı bir Answers örneğini geçirebilir. Bu mümkün değilse, sen FabicTrackerUtils Erişimci yöntemi eklersiniz:

public class FabicTrackerUtils { 
    private Answers answers; 

    public setAnswers(Answers answers) { 
     this.answers = answers; 
    } 

    private static void trackLoginActivity(LoginEvent loginEvent) { 
     //... 
     answers.logLogin(loginEvent); 
    } 
} 
+0

harika cevap. ve bu bağlantı onu sağlamlaştırdı. https://medium.com/@fabioCollini/android-testing-using-dagger-2-mockito-and-a-custom-junit-rule-c8487ed01b56#.vu3i4eqnj – j2emanue

İlgili konular