我是 Spring 新手,正在使用 Postgresql/JPA 和 MongoDB 组件测试 Spring Data 项目。我的测试类有以下注释:
@SpringBootApplication
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class, PgRepository.class, MongodbRepository.class})
public class PerfTest {
@Autowired
private PgRepository pgRepo;
@Autowired
private MongodbRepository mongoRep;
出于某种原因,spring-context
模块在解析 bean 类时尝试加载 WebMvcConfigurer
,给我一个 NoClassDefFoundError
。
Spring Boot Autoconfigure 是否尝试启动完整的 Web Controller 套件?如果是这样,为什么?我真的只是对 Spring Data 感兴趣。我应该完全避免 Spring Boot 吗?
最佳答案
您不应该将测试类注释为@SpringBootApplication
。此注释用于在主代码库中定义一个类,其中包含一个 main() 方法,用于通过自动配置启动 Spring boot 容器。
如果您有兴趣测试 Spring 数据,那么您的测试将需要指向一个 @Configuration
类,该类用 @EnableJpaRepositories
注释,这将允许您的存储库接口(interface) Autowiring 。
我不知道你的 SpringMongoConfig 类中有什么,但如果它包含该注释,那么你需要做的就是:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class})
public class PerfTest {
如果没有,那么您需要设置此配置并将其包含在测试的 @ContextConfiguration
中。
另一个更重量级的选项,但会保证一切都可用于您的测试(前提是您的 Spring boot 应用程序设置正确)是使用 @SpringBootTest
标记您的测试,这将自动加载应用程序的整个 Spring 启动上下文。如果找不到主类,您可以通过在注释中提供类来指出正确的方向:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyMainClass.class)
public class PerfTest {
关于java - 为什么要加载WebMvcConfigurer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51398695/