Java 如何为接口编写测试用例?

Java 如何为接口编写测试用例?,java,junit,Java,Junit,我需要为接口类获得100%的代码覆盖率,如何编写junit测试用例来测试接口 public interface RetrieveOperation { public RetrieveClassOfServiceProfileResponse retrieve(String login, RetrieveClassOfServiceProfileRequest request) throws Exception; } 接口本身不做任何事情,因此没有理由也没有办法对其进

我需要为接口类获得100%的代码覆盖率,如何编写junit测试用例来测试接口

public interface RetrieveOperation {
  public RetrieveClassOfServiceProfileResponse
      retrieve(String login, RetrieveClassOfServiceProfileRequest request)
      throws Exception;
}

接口本身不做任何事情,因此没有理由也没有办法对其进行测试。测试实现接口的类才有意义

public interface RetrieveOperation {
  public RetrieveClassOfServiceProfileResponse
      retrieve(String login, RetrieveClassOfServiceProfileRequest request)
      throws Exception;
}

一个例外是Java 8中的
静态
方法(由于不需要实例,因此可以轻松测试)和新的
默认
方法。在本例中,您没有这样的方法,但是如果您有这样的方法,您可以通过创建一个最小类来测试它,该类通过使用no op实现所有非默认方法来实现接口,然后使用该类来测试默认方法。

如您所见,该接口中没有任何可测试的内容。您不可能也不需要100%覆盖纯界面

public interface RetrieveOperation {
  public RetrieveClassOfServiceProfileResponse
      retrieve(String login, RetrieveClassOfServiceProfileRequest request)
      throws Exception;
}
根据您试图做的事情,您可以像通常那样为各个实现编写单元测试。要强制执行接口的行为,通常可以编写一个助手类/方法来检查任意实现的不变量,然后在实现的单元测试中进行一个调用该助手的测试

例如



测试接口的实现。你不测试接口,你测试实现接口的类。你如何衡量代码覆盖率?我从来没有听说过一个代码覆盖率工具,它将接口方法声明计算为未覆盖。你不能测试接口。这就是为什么你应该相信那些声称拥有100%覆盖率的软件:它会导致程序员编写最无意义的测试,这些测试总是会成功,但只需设法调用所有行即可。如果你问这样一个问题,你可能想读一读代码测试及其用例。让两个测试委托给同一个测试方法,仅仅使用不同的实现,就应该引起这样一个问题:为什么有两个类具有完全相同的行为。我怀疑它能否解决覆盖率问题,因为它看起来与生成它的工具有关。这种验证器的目的是强制执行不变量(例如,
List.iterator()
应该返回一个
迭代器,该迭代器返回元素的顺序与对
List.get()
的递增调用的顺序相同)不管执行情况如何。它有助于在不同接口之间强制执行共享行为,因为它不是标准的单元测试。