2016-03-18 3 views
1

Я ищу способ игнорировать вызовы статических методов при запуске тестов.java - как игнорировать класс или метод только при запуске тестов

Мой испытательный бегун является робоэлектриком. У меня есть некоторые методы, которые я не хочу выполнять при выполнении теста. Есть ли какая-либо аннотация или техника, которую я могу использовать?

Моя утилита класса мне нужно просто игнорировали выглядит следующим образом:

public class FabicTrackerUtils { 

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

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

Я хочу, чтобы избежать испытания условными, например, if(!robolectricTest) по всем методам моего производственного кода.

+2

Что это говорит мне о том, что вы должны быть инъекционные поддельной 'Answers' экземпляр в тестах, что не делает регистрацию, вместо того, статический 'Answers.getInstance()'. –

ответ

4

Чтобы подробнее прокомментировать комментарий @Louis, вы должны использовать инъекцию зависимости, например. при наличии подписи методов, как эти:

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

альтернатива, так как экземпляр Answers выглядит как синглтон, чтобы придать объект в качестве переменной экземпляра, например:

public class FabicTrackerUtils { 
    private Answers answers; 

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

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

Это при условии, что тест может создать экземпляр FabicTrackerUtils и передать в причудливый пример Answers. Если это не возможно, вы бы добавить акцесора к FabicTrackerUtils:

public class FabicTrackerUtils { 
    private Answers answers; 

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

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

отличный ответ. и эта связь затвердела. https://medium.com/@fabioCollini/android-testing-using-dagger-2-mockito-and-a-custom-junit-rule-c8487ed01b56#.vu3i4eqnj – j2emanue