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

java - how to ignore a class or method only when tests are running

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

我的测试运行器是 robolectric。我有一些方法在执行测试时不想执行。我可以使用任何注释或技术吗?

我需要忽略的实用程序 class 看起来像这样:

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) 整个生产代码的方法。

为了详细说明@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);
    }
}