我在类路径中有一个spring-boot
个spring-boot-starter-web
和spring-boot-starter-data
项依赖项目。
compile "org.springframework.boot:spring-boot-starter-web:1.0.2.RELEASE"
compile "org.springframework.boot:spring-boot-starter-data-jpa:1.0.2.RELEASE"
现在,我想仅测试spring-data-jpa
相关类。为此,我希望spring-boot
仅对spring-boot-starter-data-jpa
进行自动配置。但是,如果我在用于测试的@EnableAutoConfiguration
课程中@Configuation
,spring-boot
会尝试为spring-boot-starter-web
和spring-boot-starter-data-jpa
自动配置。
@SpringApplicationConfiguration(classes = {DataConfig.class})
public class PersonRepositoryTests extends AbstractJUnit4SpringContextTests {
@Autowired
PersonRepository personRepository;
@Test
public void testSaveWithNameNull() {
/* ... */
}
}
@Configuration
@EnableAutoConfiguration
@EnableJpaRepositories(basePackageClasses = {RepoPackage.class})
@EntityScan(basePackageClasses = {DomainPackage.class})
@EnableTransactionManagement
public class DataConfig {
}
如何配置spring boot以便仅为测试目的自动配置特定依赖项?
在我的上下文中,我希望spring-boot
仅自动配置spring-data-jpa
相关配置,省略web
相关配置。
或者,还有其他更好的方法可以在spring-boot中设置这种类型的测试配置吗?
答案 0 :(得分:4)
即使上面的答案是正确的一个额外的评论。
@EnableAutoConfiguration
注释开始自动配置它在类路径上找到的所有内容。您可以通过排除某些自动配置类来排除内容,例如:
@AutoConfiguration(exclude = {
DataSourceAutoConfiguration.class,
HibernateJpaAutoConfiguration.class
})
同样,您可以通过@Import
自动配置类自动配置部分功能。像:
@Import({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
我的真实世界的例子:
@EnableAutoConfiguration
上有@Configuration
@Import
@Conditional
答案 1 :(得分:1)
我想你已经拥有它了。如果您使用@SpringApplicationConfiguration
但未指定@WebAppConcfiguration
,那么您将无法获得Web应用程序,因此没有MVC层。
答案 2 :(得分:0)
有@ImportAutoConfiguration注释,您可以将其用于此目的。
在groovy中有我的示例,但是您可以简单地将其重写为Java:
配置类:
@Configuration
@ImportAutoConfiguration(classes = [HibernateJpaAutoConfiguration.class, DataSourceAutoConfiguration.class])
@EntityScan(basePackages = 'package.with.entities')
@EnableJpaRepositories(basePackages = 'package.with.repositories')
class JpaRepositoryConfig {
}
测试类:
@ContextConfiguration(classes = JpaRepositoryConfig,
initializers = ConfigFileApplicationContextInitializer.class) //initializer is for loading config from application.yml
class YourTestClass {