春季测试:避免在测试中加载配置类

时间:2018-09-24 08:01:39

标签: spring spring-boot spring-data spring-data-mongodb spring-test

这是我在Spring Boot项目中使用的带有Spring @Configuration注释的类:

@Configuration
@ImportResource({ 
    "classpath:cat/gencat/ctti/canigo/arch/web/rs/config/canigo-web-rs.xml",
    "classpath:cat/gencat/ctti/canigo/arch/core/i18n/config/canigo-core-i18n.xml"
})
public class WebServicesConfiguration {

如您所见,我正在导入第三方声明的资源。

尽管如此,我试图避免将它们导入到我的测试中。当前,我正在尝试创建测试以测试数据库通信。我不需要加载那些资源。

我怎么能得到它?

这是我的相关代码段:

@RunWith(SpringRunner.class)
@SpringBootTest()
public class ModelTest {

    @Autowired
    private MongoTemplate mongoTemplate;

因此,我想避免在WebServicesConfiguration运行时加载ModelTest配置类。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用 Spring Profiles 来实现您的方案。

首先,将配置文件注释添加到您的配置中。请注意,您可以将多个配置文件添加到单个配置中(如下面的片段所示),并且如果指定配置文件的任何是活动的,则将应用该配置。

@Configuration
@ImportResource({ 
    "classpath:cat/gencat/ctti/canigo/arch/web/rs/config/canigo-web-rs.xml",
    "classpath:cat/gencat/ctti/canigo/arch/core/i18n/config/canigo-core-i18n.xml"
})
@Profile(value = {"dev", "prod"})
public class WebServicesConfiguration {

}

然后,在测试方面,定义要为测试激活的配置文件。

@RunWith(SpringRunner.class)
@SpringBootTest() 
@ActiveProfiles(profiles = {"test"})
public class ModelTest {

    @Autowired
    private MongoTemplate mongoTemplate;

}

答案 1 :(得分:0)

您可以为所有测试创建单独的配置,并将其命名为ApplicationTest。在测试中,您需要使用以下代码进行指定:

@SpringBootTest(classes = ApplicationTest.class)
public class ModelTest {

    @Autowired
    private MongoTemplate mongoTemplate;
}