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);
}
}
我正在寻找一种在测试 运行 时忽略静态方法调用的方法。
我的测试运行器是 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);
}
}