Spring Boot 3.1
在一个用@JsonTest
注解的测试类上,我应该只得到JSON序列化/反序列化测试所需的最少的东西。
我的主要应用程序类注解如下:
@SpringBootApplication
@EnableJpaRepositories(considerNestedRepositories = true)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
字符串@EnableJpaRepositories
注解导致JsonTest尝试启动所有JPA内容,即使这不是意图。这是记录的here。还有this ticket,它没有进一步的注解就关闭了。
我的选项是什么?我需要@EnableJpaRepositories
注解,因为我需要considerNestedRepositories
设置。所以我不能把它忽略掉。
1条答案
按热度按时间mrwjdhj31#
答案在Sping Boot 指南中:我必须从应用程序的主类中删除这样的注解。
我的主类现在是“干净”的:
字符串
然后我有一堆“@Configuration”文件,每个区域一个。例如,我有一个用于Jackson,一个用于JPA,一个用于Swagger等。这种配置的分离使得使用Sping Boot 的
@...Test
annotation(如@JsonTest
annotation)更容易执行有针对性的测试。例如,我的JPA配置文件看起来像这样:
型
(yes,它是空的,但我可能有一天会在那里放一些东西,主要的一点是有一个地方放
@EnableJpaRepositories
注解。)使用测试切片的测试(如
@JsonTest
)不会拾取我所有的“@Configuration”文件,它只会自动检测应用程序的主类。因此在这样的测试中,我必须显式地拉入(导入)适当的配置,就像这样:型
在这里,我引入了应用程序的通用Jackson配置(
JacksonConfig
类)。此外,我还引入了一些额外的配置,JacksonTest.JacksonTestConfig
,它位于测试树中。总而言之,使用这种技术,我可以“组合”我想要添加到测试中的配置。士气是:保持你的主类不包含任何注解,特别是当它们应用于你不想应用切片测试的领域时。不幸的是,互联网上到处都是建议,人们会说:“只要将这个注解添加到你的主类”...但这并不总是一个好主意。