因此,我决定对系统进行模块化,直到进行测试为止,一切正常。但是现在,我真的不知道处理测试包的正确方法。
我的项目的结构如下:
基本上, 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。
我知道此错误与自动模块有关,但是老实说,我不知道该从哪个方向前进。有提示吗?