2016-03-18 5 views
1

Ich suche nach einer Möglichkeit, statische Methodenaufrufe zu ignorieren, wenn Tests ausgeführt werden.java - Wie ignoriere ich eine Klasse oder Methode nur, wenn Tests ausgeführt werden

Mein Test Runner ist Roboclectric. Ich habe einige Methoden, die ich nicht ausführen möchte, wenn ein Test ausgeführt wird. Gibt es eine Anmerkung oder eine Technik, die ich verwenden kann?

Meine Utility-Klasse i einfach ignoriert müssen wie folgt aussieht:

public class FabicTrackerUtils { 

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

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

Ich möchte mit Test conditionals zu vermeiden, z.B. if(!robolectricTest) über meine gesamten Produktionscode Methoden.

+2

Was mir dies legt nahe, dass Sie Answers' Instanz in Ihren Tests eine gefälschte 'werden Injektion sollte die keine Protokollierung der Fall ist, anstelle von eine statische 'Answers.getInstance()'. –

Antwort

4

Um den @Louis-Kommentar näher auszuführen, sollten Sie die Abhängigkeitsinjektion verwenden, z. indem Methodensignaturen, wie diese:

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

Eine Alternative, da die Answers Instanz wie ein Singleton sieht, wird das Objekt als eine Instanzvariable zu injizieren, zum Beispiel:

public class FabicTrackerUtils { 
    private Answers answers; 

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

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

Dies wird unter der Annahme, dass die Test kann FabicTrackerUtils instanziieren und in einer gespielten Answers Instanz übergeben. Wenn dies nicht möglich ist, sollten Sie eine Zugriffsmethode zu FabicTrackerUtils hinzufügen:

public class FabicTrackerUtils { 
    private Answers answers; 

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

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

große Antwort. und diese Verbindung festigte es. https://medium.com/@fabioCollini/android-testing-using-dagger-2-mockito-and-a-custom-junit-rule-c8487ed01b56#.vu3i4eqnj – j2emanue

Verwandte Themen