Spring 引导:自动配置的工作原理和@JsonTest
Spring Boot : how auto configure works and @JsonTest
我读过一些关于自动配置如何在幕后工作的东西(配置 类 和 @Conditional
,spring.factories
在 /META-INF
等...)
现在我想通过一个例子来理解:@JsonTest
我可以看到这个注释被注释了 @AutoConfigureJson
这个 @AutoConfigureJson
到底做了什么?它会导入一些配置 类 里面有 beans 吗? Spring 如何知道如何使用这个注解(基本上这个注解几乎是空的,没有说明要扫描哪个 类)
@AutoConfigure...
(如@AutoConfigureJson)注释是允许使用多个“切片”进行测试的方法。
切片仅将应用程序的一个子集加载到您的测试中,从而使它们 运行 更快。假设您需要测试使用 Jackson Object Mapper 的组件,那么您将需要 @JsonTest
切片。 (这里是all available slices的名单。)
但是您可能还需要在测试中使用框架的其他部分,而不仅仅是单个切片;让我们说 JPA 层。您可能希望同时使用 @JsonTest 和 @DataJpaTest 注释测试以加载两个切片。 According to the docs,不支持。
您应该做的是选择一个 @...Test
注释,并将另一个包含在 @AutoConfigure...
注释中。
@JsonTest
@AutoConfigureDataJpa
class MyTests {
// tests
}
更新:
在评估注释的某个时刻,Spring Boot 将命中 this line 并将传递给方法 SpringFactoriesLoader.loadFactoryNames()
一个源,即注释的完全限定名称(如 interface org.springframework.boot.test.autoconfigure.json.AutoConfigureJson
例如)。
loadFactoryNames method will do its magic and read the necessary information from here.
如果需要更多详细信息,最好的办法是使用调试器并按照所有步骤进行操作。
我读过一些关于自动配置如何在幕后工作的东西(配置 类 和 @Conditional
,spring.factories
在 /META-INF
等...)
现在我想通过一个例子来理解:@JsonTest
我可以看到这个注释被注释了 @AutoConfigureJson
这个 @AutoConfigureJson
到底做了什么?它会导入一些配置 类 里面有 beans 吗? Spring 如何知道如何使用这个注解(基本上这个注解几乎是空的,没有说明要扫描哪个 类)
@AutoConfigure...
(如@AutoConfigureJson)注释是允许使用多个“切片”进行测试的方法。
切片仅将应用程序的一个子集加载到您的测试中,从而使它们 运行 更快。假设您需要测试使用 Jackson Object Mapper 的组件,那么您将需要 @JsonTest
切片。 (这里是all available slices的名单。)
但是您可能还需要在测试中使用框架的其他部分,而不仅仅是单个切片;让我们说 JPA 层。您可能希望同时使用 @JsonTest 和 @DataJpaTest 注释测试以加载两个切片。 According to the docs,不支持。
您应该做的是选择一个 @...Test
注释,并将另一个包含在 @AutoConfigure...
注释中。
@JsonTest
@AutoConfigureDataJpa
class MyTests {
// tests
}
更新:
在评估注释的某个时刻,Spring Boot 将命中 this line 并将传递给方法 SpringFactoriesLoader.loadFactoryNames()
一个源,即注释的完全限定名称(如 interface org.springframework.boot.test.autoconfigure.json.AutoConfigureJson
例如)。
loadFactoryNames method will do its magic and read the necessary information from here.
如果需要更多详细信息,最好的办法是使用调试器并按照所有步骤进行操作。