我是 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模块试图WebMvcConfigurer在解析 bean 类时加载,给我一个NoClassDefFoundError.Spring Boot Autoconfigure 是否尝试启动完整的 Web 控制器套件?如果是这样,为什么?我真的只是对 Spring Data 感兴趣。我应该完全避免 Spring Boot 吗?
2 回答
![?](http://img1.sycdn.imooc.com/54586431000103bb02200220-100-100.jpg)
炎炎设计
TA贡献1808条经验 获得超4个赞
您不应该将测试类注释为@SpringBootApplication. 此注释用于在主代码库中定义一个类,该类包含一个 main() 方法,用于通过自动配置启动 Spring boot 容器。
如果它是您有兴趣测试的 Spring 数据,那么您的测试将需要指向一个@Configuration用@EnableJpaRepositories此注释的类,这将允许您的存储库接口自动装配。
我不知道您的 SpringMongoConfig 类中有什么,但是如果它包含该注释,那么您需要做的就是:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SpringMongoConfig.class})
public class PerfTest {
如果没有,那么您需要设置此配置并将其包含在@ContextConfiguration测试中。
另一个更重量级但可以保证所有内容都可用于您的测试的选项(假设您的 Spring boot 应用程序设置正确)是标记您的测试,@SpringBootTest这将自动加载应用程序的整个 Spring boot 上下文。如果找不到您的主类,您可以通过在注释中提供该类来将其指向正确的方向:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyMainClass.class)
public class PerfTest {
添加回答
举报
0/150
提交
取消