Java 使用@Autowired的接口实现的JaCoCo代码覆盖率

Java 使用@Autowired的接口实现的JaCoCo代码覆盖率,java,testing,reflection,jacoco,Java,Testing,Reflection,Jacoco,我已经为我的测试创建了一个包含默认方法的接口。目前,它看起来是这样的: public interface CRUDTest< Controller extends ControllerCRUD<Model, DTO, Creation, Update, Service>, Service extends ServiceCRUD<Model, Creation, Update, ? extends GenericRepository<M

我已经为我的测试创建了一个包含默认方法的接口。目前,它看起来是这样的:

public interface CRUDTest<
        Controller extends ControllerCRUD<Model, DTO, Creation, Update, Service>,
        Service extends ServiceCRUD<Model, Creation, Update, ? extends GenericRepository<Model>>,
        Creation extends CreationDTO<Model>,
        Update extends UpdateDTO<Model>,
        DTO extends ModelDTO,
        Model extends GenericModel> {

  Controller getController();
  Service getService();
  ImageService getImageService();

  Creation generateCreationDTO();

  default void doStuff() {
    service().createFromDTO(generateCreationDTO());
    // ...
  }
}
公共接口CRUDTest<
控制器扩展控制器CRUD,
服务扩展了ServiceCRUD,
创造延伸到创造,
更新扩展了updateto,
DTO扩展了ModelDTO,
模型扩展了GenericModel>{
控制器getController();
服务getService();
ImageService getImageService();
创建generateCreationDTO();
默认的void doStuff(){
服务().createFromDTO(generateCreationDTO());
// ...
}
}
然后,每个测试通过以下方式实现此接口:

public class Implementation implements CRUDTest<ExampleController, ExampleService, ExampleCreationDTO, ExampleUpdateDTO, ExampleDTO, ExampleModel> {

  @Autowired @Getter private SongService service;

  @Autowired @Getter private SongController controller;

  @Autowired @Getter private ImageService imageService;


  @Test
  public void doStuff() {
    CRUDTest.super.doStuff();
  }
}
公共类实现实现了CRUDTest{
@自动连线@Getter private SongService;
@自动连线@Getter专用SongController;
@自动连线@Getter private ImageService ImageService;
@试验
公共空间{
CRUDTest.super.doStuff();
}
}

据我所知,我的服务中的“createFromDTO”方法现在应该报告为JaCoCo所涵盖,并且在运行测试时显然会调用它。但是,JaCoCo报告说该方法未被发现,因此我想知道我可能遗漏了什么。

我发现了问题!我正在处理的项目遵循多模块结构,一些集成测试包括来自不同项目的方法。因此,JaCoCo没有涵盖这些方法,但通过一些谷歌搜索,我相信有几种方法可以解决这个问题。

JaCoCo独立于类的执行方式(直接、通过反射或其他方式)记录插入指令的类的执行。提供的例子肯定不足以理解您的困难。@Godin我已经切换到另一种方法来避免反射,但最终结果是一样的。我已经添加了一个更完整的例子,我希望这将证明是足够的。不,这是不够的。您能否提供一个真正完整的示例,其中不需要猜测方法
getService
如何工作、如何编译、如何执行测试以及如何生成覆盖率报告?例如,作为GitHub的一个项目?