【发布时间】:2010-10-12 17:54:01
【问题描述】:
我希望 JUnit 4 测试类实现与其测试类相同的接口。这样,当接口发生变化时(它会发生变化,我们处于早期开发阶段),编译器保证将相应的方法添加到测试类中。例如:
public interface Service {
public String getFoo();
public String getBar();
}
public class ServiceImpl implements Service {
@Override public String getFoo() { return "FOO"; }
@Override public String getBar() { return "BAR"; }
}
public class ServiceTest implements Service {
@Override
@Test
public String getFoo() {
//test stuff
}
@Override
@Test
public String getBar() {
//test stuff
}
}
当我尝试这个时,我得到一个错误:“java.lang.Exception: Method getFoo() should be void”, 大概是因为测试方法必须返回 void。有谁知道解决这个问题的方法吗?
【问题讨论】:
-
我已经使用 JUnit 4 好几年了,如果不从要测试的类中以某种方式派生 JUnit 测试类,我不知道如何做你想做的事。
-
如何强制该方法通过接口保证以任何方式被测试?由于您正在尝试使用编译器来保证测试覆盖率,可以这么说......但是与实现相同接口的生产类的单独实例并不能保证测试。它保证遵守界面。
-
嗯,没错,它保证每个服务方法的测试类中都添加了一个方法。它不能保证该方法实际测试任何东西。坦率地说,任何代码覆盖工具都没有,因为您可以运行所有代码并断言。我只是想提醒开发人员有一些出色的测试需要考虑。
-
查看 PMD pmd.sourceforge.net/rules/junit.html 特别是 JUnitTestsShouldIncludeAssert 规则。
标签: java unit-testing junit annotations junit4