最佳实践:测试接口合同合规性?

cWa*_*ren 6 java testing junit interface

假设定义了接口

interface Foo {
  int getBaz();
  void doBar();
}
Run Code Online (Sandbox Code Playgroud)

进一步假设合同规定每次doBar被称为baz都会增加.(好的,这是一个人为的代码,但在这里坚持我)

现在我想提供一个单元测试,我可以提供给Foo实施者,以便他们可以验证他们是否符合所有合同条件.

class FooTest {
  protected Foo fooImpl;

  @Test
  public void int testBazIncrement()
  {
    int b = fooImpl getBaz();
    fooImpl.doBar();
    Assert.assertEquals( b+1, fooImpl.getBaz();
  }
}
Run Code Online (Sandbox Code Playgroud)

将测试提供给Foo的实现者的最佳实践是什么?在我看来,需要一种机制让他们调用FooTest并提供Foo或FooFactory来构造Foo实例.此外,如果有很多测试(想想大接口),那么我想把所有这些测试放在一个FooTest类中.

有没有关于如何实施此类测试的最佳实践?

Var*_*gan 0

你可以实现一个 testDataFactory 来放置你的对象,或者使用 GSon 来创建你的对象(就我个人而言,我喜欢 GSon,它清晰而快速,你很快就能学会)。对于测试实现,我建议编写更多测试,而不是单个测试。通过这种方式,单元测试可以是独立的,并且您可以将问题隔离在封闭的结构中。

声纳

Sonar 是一个可以帮助您很多的工具,可以对您的代码进行分析。您可以从声纳前端看到您的应用程序是如何测试的:

声纳单元测试

如您所见,Sonar 可以显示您的代码在哪里经过测试或未经过测试