gpt4 book ai didi

java - 基于配置启用/禁用 JUnit 测试

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:51:41 24 4
gpt4 key购买 nike

根据配置参数启用/禁用 junit 测试的最佳方法是什么?假设我有一个 Config 类,它指示软件的某些状态,使给定的一组测试无效。

我可以将测试主体放在测试方法中的 if 语句中,例如:

@Test
public void someTest() {
if(Config.shouldIRunTheTests()) {
//do the actual test
}
}

这看起来很糟糕,因为当我实际上想要跳过这些测试时,我实际上获得了这些案例的测试通过。想要这样的东西:

@Test[Config.shouldIRunTheTests()] 
public void someTest() {
//do the actual test
}

这可能吗?

最佳答案

实际上,我认为这种情况下最好的解决方案是编写您自己的 org.junit.Runner。它并不像看起来那么复杂。一个简单的示例是:

运行者:

package foo.bar.test;

import org.junit.runner.Description;
import org.junit.runner.Runner;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.JUnit4;
import org.junit.runners.model.InitializationError;

public class MyRunner extends Runner {

private final Runner runner;

public MyRunner(final Class<?> klass) throws InitializationError {
super();
this.runner = new JUnit4(klass);
}

@Override
public Description getDescription() {
return runner.getDescription();
}

@Override
public void run(final RunNotifier notifier) {
for (Description description : runner.getDescription().getChildren()) {
notifier.fireTestStarted(description);
try {
// here it is possible to get annotation:
// description.getAnnotation(annotationType)
if (MyConfiguration.shallExecute(description.getClassName(), description.getMethodName())) {
runner.run(notifier);
}
} catch (Exception e) {
notifier.fireTestFailure(new Failure(description, e));
}
}
}

}

测试用例:

package foo.bar.test;

import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(MyRunner.class)
public class TestCase {

@Test
public void myTest() {
System.out.println("executed");
}

}

和配置类:

package foo.bar.test;

public class MyConfiguration {

public static boolean shallExecute(final String className, final String methodName) {
// your configuration logic
System.out.println(className + "." + methodName);
return false;
}

}

这里很酷的是你可以实现自己的注释,例如:@TestKey("testWithDataBase"),请参阅上面示例源的评论。您的配置对象可以定义测试是否应该运行,因此您可以对测试进行分组,当您有很多测试需要分组时,这非常有用。

关于java - 基于配置启用/禁用 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com