java - @DataJpaTest - 从 @SpringBootApplication 类加载配置
问题描述
我有点困惑,基于这个文档,我应该只放这个注释@DataJpaTest
,它会将我的应用程序上下文配置为仅适用于 JPA 存储库,也适用于内存数据库。现在问题出在我的应用程序中,我有一个带有注释的 Main 类,@SpringBootApplication
它正在从那里加载 Web 拦截器的其余配置以及许多其他内容。事实上,它也在尝试加载 bootstrap.properties 文件。
据我了解,它不应该使用这种配置。
下面是我的测试代码和主类。
@OpenAPIDefinition(info = @Info(title = "Test API", version = "0.1.10-SNAPSHOT", description = "Test API", contact = @Contact(name = "My Team", email = "sample@mycompany.com")), servers = {
@Server(description = "Current Stage Server url", url = "https://mycompany.com/testapics"),
@Server(description = "Stable Stage Server url", url = "https://mycompany.com/testapi") })
@SpringBootApplication(scanBasePackages = { "com.mycompany.utility", "com.mycompany.sample.users",
"com.mycompany.sample.utility", "com.mycompany.another.sample.interceptor",
"com.mycompany.sample.security.vulnerableinput", "com.mycompany.sample.security.nocache.filter",
"com.mycompany.sample.security.common", "com.mycompany.sample.security.csrf",
"com.mycompany.sample.security.nocache" })
@EnableCaching
@EnableAsync
public class SampleApiApplication implements WebMvcConfigurer {
主类中有一堆其他的 bean 配置。(为了清楚起见,省略了这些)。
下面是我的测试课。
@DataJpaTest
public class UsersRepositoryTest {
@Autowired
private UsersRepository usersRepository;
@Test
public void test_usersRepository_findByEmplId() {
List<User> users = getUsersData();
UsersRepository.saveAll(users);
for (User user : users) {
Assert.assertTrue(user.getId() != null);
}
}
private List<User> getUsersData() {
List<User> userList = new ArrayList<>();
User user = new User();
user.setEmpId("XYZ_001");
user.setUserUUID(UUID.randomUUID().toString());
userList.add(user);
return userList;
}
}
解决方案
如果您使用测试注释来测试应用程序的更具体部分,则应避免在主方法的应用程序类上添加特定于特定区域的配置设置。
@SpringBootApplication
定义了用于确保切片按预期工作的排除过滤器的底层组件扫描配置。如果您在 -annotated 类上使用显式@ComponentScan
指令,请@SpringBootApplication
注意这些过滤器将被禁用。如果您使用切片,则应重新定义它们。
因此,在您的情况下,请考虑将 , 之类的注释移动@EnableCaching
到@EnableAsync
单独的类中。
推荐阅读
- android - Error: Could not find EOCD, after adding "splits" in Android
- sql - SQL query that will return rows that don't have a corresponding status, across ANY rows that have the same id?
- python - 在张量模型中输入多个输入和输出?
- swift - How we can define a State variable type Any?
- angular - Angular 8 passing data to Child routes
- node.js - Nodejs Express API - Mongoose performance response (slow)
- excel - Using SUM function in cell formula yields #NAME error
- powershell - powershell query - how many OR can i use?
- javascript - 图表js onclick函数调用
- python - django 中的异常:查询集没有属性用户