JUnit 4中的非空虚测试方法

时间:2010-10-12 17:54:02

标签: java unit-testing junit annotations junit4

我希望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”, 大概是因为测试方法必须返回无效。有人知道有什么方法吗?

2 个答案:

答案 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集成并且它向您展示了在某些情况下您的测试可能不足的情况(在很多情况下,这样的工具无法捕获)。