【发布时间】:2020-12-09 20:25:08
【问题描述】:
我在尝试在我的 spring-boot 项目中进行测试时遇到问题。
如您所见,我的项目由 maven 模块组成。 “alta-launcher”是将所有其他模块作为依赖项的“主”项目。 问题是我在用户模块中的测试不会获得 spring 上下文,所以我的字段“Autowired”在运行时将为空。
任何想法如何配置此项目以能够在每个模块中进行测试?
编辑:
@SpringBootTest(classes = CoreApplication.class)
class UserQueryTransformerImplTest {
@Autowired
private UserQueryTransformer userQueryTransformer;
@Test
void toDTO() {
UserEntity userEntity = new UserEntity();
userEntity.setLogin("everest");
userEntity.setFirstName("Everest");
userEntity.setLastName("Mountain");
UserQueryDTO userQueryDTO = userQueryTransformer.toDTO(userEntity);
assertEquals(userEntity.getLogin(), userQueryDTO.getLogin());
assertEquals(userEntity.getFirstName(), userQueryDTO.getFirstName());
assertEquals(userEntity.getLastName(), userQueryDTO.getLastName());
}
带有属性类的注释@SpringBootTest 无法使用,因为我无法从用户模块访问启动器模块。没有属性(juste @SprinBootTest)是当我让我的自动装配字段为空时,这是有道理的,因为我没有上下文。
【问题讨论】:
-
浏览文档:spring.io/guides/gs/multi-module。它几乎涵盖了您可能需要的所有内容!
-
感谢您的回答,但我已经多次阅读此文档,但对我的情况没有帮助...我的项目分为作为我的域的模块,模块启动器正在获取其他模块作为依赖项,所以我没有来自这些模块的上下文:(
-
您的自动连线字段不能是
null。您的应用程序或测试会以UnsatisfiedDependencyException代替。因此,如果他们是null,那么您做错了(不使用 Spring 运行您的测试,自己创建实例等)。但是,由于您只发布了项目结构的图像并且没有添加实际测试,因此无法判断。 -
我编辑了我的帖子,以便您获得更多信息。希望对你有帮助
-
您不能将 Spring Boot jar 作为依赖项包含在另一个项目中。 Spring BOot fat jar 具有不同的结构(由于类的自定义加载),因此类不可用。如果你真的想要这个,你将不得不提供 2 个工件 1 个 fatjar 和一个包含类的 non-fatjar(一个常规 jar)。
标签: java spring spring-boot unit-testing multi-module