在模块化系统中处理测试的正确方法是什么?

时间:2019-12-10 18:59:57

标签: java testing junit java-module

因此,我决定对系统进行模块化,直到进行测试为止,一切正常。但是现在,我真的不知道处理测试包的正确方法。

我的项目的结构如下:

enter image description here

基本上, EntityDTOConverter 是一个实用程序类,它使用ModelMapper库通过反射将实体转换为DTO,反之亦然。

现在我的module-info.java看起来像这样:

module com.vet.clinic.core.app {
  requires com.vet.clinic.core.domain;

  requires typetools;
  requires modelmapper;
  requires jakarta.el;
  requires spring.context;
  requires org.mapstruct.processor;

  exports com.vet.clinic.core.app.converter;
  exports com.vet.clinic.core.app.dto;
}

如果按原样运行,则会出现以下错误:

  

-------------------------------------------------- --------------------------------测试集:com.vet.clinic.core.app.converter.EntityDTOConverterTest   -------------------------------------------------- -----------------------------测试运行:1,失败:0,错误:1,跳过:0,经过时间:0.019   s <<<失败! -在   com.vet.clinic.core.app.converter.EntityDTOConverterTest   com.vet.clinic.core.app.converter.EntityDTOConverter测试时间   经过:0.018 s <<<错误!   java.lang.reflect.InaccessibleObjectException:无法公开   静态空隙   com.vet.clinic.core.app.converter.EntityDTOConverterTest.once()   可访问性:模块com.vet.clinic.core.app无法“打开   com.vet.clinic.core.app.converter”添加到未命名的模块@ 20f5239f

现在,如果我将以下行添加到module-info.java中:

opens com.vet.clinic.core.app.converter;

然后上述错误消失了,但是我得到了:

  

-------------------------------------------------- --------------------------------测试集:com.vet.clinic.core.app.converter.EntityDTOConverterTest   -------------------------------------------------- -----------------------------测试运行:4,失败:0,错误:4,跳过:0,经过时间:0.163   s <<<失败! -在   com.vet.clinic.core.app.converter.EntityDTOConverterTest   给定的DTO_whenConvertIsCalled_thenConvertToBaseEntity经过的时间:   0.063 s <<<错误! org.modelmapper.MappingException:ModelMapper映射错误:

     

1)将com.vet.clinic.core.app.mock.dto.MockBaseEntityDTO映射到错误   com.vet.clinic.core.app.mock.dto.MockBaseEntity

     

1个错误   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenDTO_whenConvertIsCalled_thenConvertToBaseEntity(EntityDTOConverterTest.java:58)   引起原因:java.lang.reflect.InaccessibleObjectException:无法执行   公开无效   com.vet.clinic.core.app.mock.dto.MockBaseEntity.setName(java.lang.String)   可访问:模块com.vet.clinic.core.app不“导出   com.vet.clinic.core.app.mock.dto“到模块modelmapper   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenDTO_whenConvertIsCalled_thenConvertToBaseEntity(EntityDTOConverterTest.java:58)

     

givenBaseEntity_whenConvertIsCalled_thenConvertToDTO经过的时间:   0.003 s <<<错误! org.modelmapper.MappingException:ModelMapper映射错误:

     

1)将com.vet.clinic.core.app.mock.dto.MockBaseEntity映射到错误   com.vet.clinic.core.app.mock.dto.MockBaseEntityDTO

     

1个错误   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenBaseEntity_whenConvertIsCalled_thenConvertToDTO(EntityDTOConverterTest.java:45)   引起原因:java.lang.reflect.InaccessibleObjectException:无法执行   公开无效   com.vet.clinic.core.app.mock.dto.MockBaseEntityDTO.setName(java.lang.String)   可访问:模块com.vet.clinic.core.app不“导出   com.vet.clinic.core.app.mock.dto“到模块modelmapper   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenBaseEntity_whenConvertIsCalled_thenConvertToDTO(EntityDTOConverterTest.java:45)

     

givenListAudibleDTO_whenConvertIsCalled_thenConvertToListBaseEntity   经过的时间:0.029 s <<<错误! org.modelmapper.MappingException:   ModelMapper映射错误:

     

1)错误映射   com.vet.clinic.core.app.mock.dto.MockAudibleBaseEntityDTO到   com.vet.clinic.core.app.mock.dto.MockBaseEntity

     

1个错误   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenListAudibleDTO_whenConvertIsCalled_thenConvertToListBaseEntity(EntityDTOConverterTest.java:88)   引起原因:java.lang.reflect.InaccessibleObjectException:无法执行   公开无效   com.vet.clinic.core.app.mock.dto.MockBaseEntity.setName(java.lang.String)   可访问:模块com.vet.clinic.core.app不“导出   com.vet.clinic.core.app.mock.dto“到模块modelmapper   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenListAudibleDTO_whenConvertIsCalled_thenConvertToListBaseEntity(EntityDTOConverterTest.java:88)

     

givenListBaseEntity_whenConvertIsCalled_thenConvertToListAudibleDTO   经过的时间:0.007 s <<<错误! org.modelmapper.MappingException:   ModelMapper映射错误:

     

1)将com.vet.clinic.core.app.mock.dto.MockBaseEntity映射到错误   com.vet.clinic.core.app.mock.dto.MockAudibleBaseEntityDTO

     

1个错误   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenListBaseEntity_whenConvertIsCalled_thenConvertToListAudibleDTO(EntityDTOConverterTest.java:72)   引起原因:java.lang.reflect.InaccessibleObjectException:无法执行   公开无效   com.vet.clinic.core.app.mock.dto.MockBaseEntityDTO.setName(java.lang.String)   可访问:模块com.vet.clinic.core.app不“导出   com.vet.clinic.core.app.mock.dto“到模块modelmapper   com.vet.clinic.core.app@0.1.0-SNAPSHOT/com.vet.clinic.core.app.converter.EntityDTOConverterTest.givenListBaseEntity_whenConvertIsCalled_thenConvertToListAudibleDTO(EntityDTOConverterTest.java:72)

现在,我无法执行建议的修复程序(“将com.vet.clinic.core.app.mock.dto导出至模块modelmapper”),因为此程序包仅存在于测试范围中,并且对于module-info.java。

通过检查其他一些相关问题like this,然后尝试将module-info.java添加到src / test / java中。尽管我的IDE(intelliJ Ultimate)显示了一个错误,指出“ module-info.java已存在于模块中”,但仍可以运行代码。

通过添加一个像下面这样简单的module-info.java:

module core.app.test {
  requires com.vet.clinic.core.domain;
  requires org.junit.jupiter.api;
  exports com.vet.clinic.core.app.mock.dto to modelmapper;
}

...然后我开始得到以下信息:

  

[错误]模块java.persistence读取包   org.codehaus.groovy.xml和org.codehaus.groovy.runtime   org.codehaus.groovy [ERROR]模块java.persistence读取包   来自org.codehaus.groovy.xml和org.codehaus.groovy的groovy.xml   [错误]模块java.persistence从两者读取包groovy.util   org.codehaus.groovy.xml和org.codehaus.groovy [ERROR]模块   java.persistence从两者读取包org.codehaus.groovy.runtime   org.codehaus.groovy.xml和org.codehaus.groovy.nio [错误]模块   java.persistence从两者读取包org.codehaus.groovy.runtime   org.codehaus.groovy.xml和org.codehaus.groovy.sql [ERROR]模块   java.persistence从android.json和   jsonassert [ERROR]模块java.persistence读取包   从org.codehaus.groovy和org.codehaus.groovy.transform转换   org.codehaus.groovy.test [ERROR]模块java.persistence读取包   org.codehaus.groovy.xml和org.codehaus.groovy.runtime   org.codehaus.groovy.test [ERROR]模块java.persistence读取包   来自org.codehaus.groovy.xml和的groovy.util   org.codehaus.groovy.test [ERROR]模块java.persistence读取包   来自org.codehaus.groovy和的groovy.transform   org.codehaus.groovy.test [ERROR]模块java.persistence读取包   org.codehaus.groovy和org.codehaus.groovy.test中的groovy.lang

这11个错误在不同的模块上多次发生,不仅是java.persistence。

我知道此错误与自动模块有关,但是老实说,我不知道该从哪个方向前进。有提示吗?

0 个答案:

没有答案