我正在寻找一种在测试运行时忽略静态方法调用的方法。
我的测试跑者是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)
遍及我的生产代码的方法。
答案 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);
}
}