2016-03-18 65 views
1

我正在寻找一种方法来在运行测试时忽略静态方法调用。java - 如何仅在测试运行时忽略类或方法

我的试跑者是robolectric。我有一些方法在执行测试时不想执行。有什么注释或技巧可以使用吗?

我的实用工具类,我需要简单地忽略看起来是这样的:

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

相关问题