我希望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()应该为void”, 大概是因为测试方法必须返回无效。有人知道有什么方法吗?
答案 0 :(得分:7)
我必须承认,这是一个巧妙的技巧,虽然它不能很好地扩展到多个测试场景。
无论如何,你可以使用自定义跑步者。例如:
@RunWith(CustomRunner.class)
public class AppTest {
@Test
public int testApp() {
return 0;
}
}
public class CustomRunner extends JUnit4ClassRunner {
public CustomRunner(Class<?> klass) throws InitializationError {
super(klass);
}
protected void validate() throws InitializationError {
// ignore
}
}
答案 1 :(得分:1)
更自然的方法可能是使用代码覆盖率工具,例如Cobertura。它很好地与JUnit集成并且它向您展示了在某些情况下您的测试可能不足的情况(在很多情况下,这样的工具无法捕获)。