我是Spring的新手,正在使用Postgresql / JPA和MongoDB组件测试Spring Data项目。我的Test类具有以下注释:
@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控制器套件?如果是这样,为什么?我真的只是对Spring Data感兴趣。我应该完全避免使用Spring Boot吗?
答案 0 :(得分:1)
您不应将测试类注释为@SpringBootApplication
。此注释用于在您的主代码库中定义一个类,该类包含main()方法,以通过自动配置启动您的Spring引导容器。
如果您对测试感兴趣的是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 {
答案 1 :(得分:0)
您需要将 @Component 添加到存储库界面。 Spring首先加载组件类,然后进行@AutoWiring和变量初始化。