开发者

Non-void test methods in JUnit 4

I would like a JUnit 4 test class to implement the same interface as the class its testing. This way, as the interface changes (and it will, we're in early development), the compiler guarantees that cor开发者_如何学Cresponding methods are added to the test class. For example:

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
  }
}

When I try this, I get an error: "java.lang.Exception: Method getFoo() should be void", presumably because test methods must return void. Anybody know of any way around this?


I have to admit, it is a neat trick, though it doesn't scale well to multiple test scenarios.

Anyways, you can use custom runner. For example:

@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
  }
}


A more natural way would probably be to use a code coverage tool, such as Cobertura. It integrates with JUnit nicely AND it shows you cases where your tests may be deficient in some cases (there are many cases such a tool won't catch though).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜