Spring Boot Sping Boot @JsonTest拉入JPA

9rygscc1  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(153)

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设置。所以我不能把它忽略掉。

mrwjdhj3

mrwjdhj31#

答案在Sping Boot 指南中:我必须从应用程序的主类中删除这样的注解。
我的主类现在是“干净”的:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

字符串
然后我有一堆“@Configuration”文件,每个区域一个。例如,我有一个用于Jackson,一个用于JPA,一个用于Swagger等。这种配置的分离使得使用Sping Boot 的@...Test annotation(如@JsonTest annotation)更容易执行有针对性的测试。
例如,我的JPA配置文件看起来像这样:

@Configuration(proxyBeanMethods = false)
@EnableJpaRepositories(considerNestedRepositories = true)
public class JpaConfig {
}


(yes,它是空的,但我可能有一天会在那里放一些东西,主要的一点是有一个地方放@EnableJpaRepositories注解。)
使用测试切片的测试(如@JsonTest)不会拾取我所有的“@Configuration”文件,它只会自动检测应用程序的主类。因此在这样的测试中,我必须显式地拉入(导入)适当的配置,就像这样:

@JsonTest()
@Import({JacksonConfig.class,JacksonTest.JacksonTestConfig.class})
public class MyJacksonTest {
...
}


在这里,我引入了应用程序的通用Jackson配置(JacksonConfig类)。此外,我还引入了一些额外的配置,JacksonTest.JacksonTestConfig,它位于测试树中。总而言之,使用这种技术,我可以“组合”我想要添加到测试中的配置。
士气是:保持你的主类不包含任何注解,特别是当它们应用于你不想应用切片测试的领域时。不幸的是,互联网上到处都是建议,人们会说:“只要将这个注解添加到你的主类”...但这并不总是一个好主意。

相关问题