Cobertura:如何覆盖spring-data @Repository接口

Saa*_*zid 8 java instrumentation cobertura spring-data jacoco

关于以下信息:

/sf/answers/1022128201/

Cobertura没有仪器接口

我想知道如何将spring-data接口添加到coverage结果中,因为@Repository实现类只是在运行时由Spring声明和实例化.

考虑以下界面:

// src/main/java/my/package/MyObjectRepository.java

@Repository
public interface MyObjectRepository  {
    MyObject findMyObjectByCodeAndName(String code, String name);
}
Run Code Online (Sandbox Code Playgroud)

并进行以下测试:

// src/test/java/my/package/MyObjectRepositoryTest.java

// @RunWith(SpringJUnit4ClassRunner.class) + Spring configuration
public class MyObjectRepositoryTest {

    @Autowired
    private MyObjectRepository myObjectRepository;

    @Test
    public void myTest() {
        myObjectRepository.findMyObjectByCodeAndName("foo","bar");  
    }
}
Run Code Online (Sandbox Code Playgroud)

我不介意切换到Jacoco,但我读过它也没有设备接口.

如何涵盖以下案例?关于Mybatis Mapper也会出现同样的问题/问题,它们被声明为接口,但实现它们的具体Java类声明不是由开发人员编写的,而是由运行时的框架编写的.

我已经开了票,但我还在等待答案.

Duo*_*yen 1

如果我理解正确的话,接口不能被覆盖。接口只是定义契约,不包含“运行时”命令。代码覆盖率工具仅测量运行测试可到达的行。换句话说,只能覆盖字段声明、构造函数或方法体。

包含一些默认方法的 Java8 接口可能是一个例外。