mga*_*mer 17 java inheritance junit
比方说,我有一个名为测试类testFixtureA有几种方法testA,testB,testC,等,每个@Test注释.
现在让我说我将子类testFixtureA化为调用类testFixtureAB,我不会覆盖任何东西.testFixtureAB现在是空的.
当我从运行测试testFixtureAB,方法testA,testB以及testC因为测试运行不从类和基类的测试方法区分是通过测试运行执行.
如何强制测试运行器从基类中省略测试?
Mat*_*ynn 23
而且我不会覆盖任何东西.testFixtureAB现在是空的
有你的答案.如果您不想从主类运行testB,请覆盖它:
public class testFixtureAB extends testFixtureA {
@Override
public void testB() {}
}
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 20
重构您的测试类.
dfa*_*dfa 11
忽略整个基类:
@Ignore
class BaseClass {
// ...
}
Run Code Online (Sandbox Code Playgroud)
小智 8
实现几个类很容易实现:
TestRunner@IgnoreInheritedTestsorg.junit.runner.manipulation.Filter在过滤器类上:
public class InheritedTestsFilter extends Filter {
@Override
public boolean shouldRun(Description description) {
Class<?> clazz = description.getTestClass();
String methodName = description.getMethodName();
if (clazz.isAnnotationPresent(IgnoreInheritedTests.class)) {
try {
return clazz.getDeclaredMethod(methodName) != null;
} catch (Exception e) {
return false;
}
}
return true;
}
@Override
public String describe() {
// TODO Auto-generated method stub
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在你的自定义跑步者:
/**
* @param klass
* @throws InitializationError
* @since
*/
public CustomBaseRunner(Class<?> klass) throws InitializationError {
super(klass);
try {
this.filter(new InheritedTestsFilter());
} catch (NoTestsRemainException e) {
throw new IllegalStateException("class should contain at least one runnable test", e);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13268 次 |
| 最近记录: |