java - 仅在测试运行时如何忽略类或方法

时间:2016-03-18 22:22:55

标签: java android robolectric

我正在寻找一种在测试运行时忽略静态方法调用的方法。

我的测试跑者是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)遍及我的生产代码的方法。

1 个答案:

答案 0 :(得分: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);
    }
}