Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在集成测试中使用Spring@ActiveProfile_Spring_Spring Annotations_Spring Test_Spring Profiles - Fatal编程技术网

在集成测试中使用Spring@ActiveProfile

在集成测试中使用Spring@ActiveProfile,spring,spring-annotations,spring-test,spring-profiles,Spring,Spring Annotations,Spring Test,Spring Profiles,我使用@Profile-Spring注释在嵌入式、独立和容器管理的数据源之间进行选择。为了选择“嵌入式”,对我的集成测试进行注释,以激活相应的配置文件: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes={TestConfigWrapper.class}) @ActiveProfiles({"EMBEDDED_DB"})

我使用@Profile-Spring注释在嵌入式、独立和容器管理的数据源之间进行选择。为了选择“嵌入式”,对我的集成测试进行注释,以激活相应的配置文件:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes={TestConfigWrapper.class})
@ActiveProfiles({"EMBEDDED_DB"})
public class SomeIntegrationTest {
问题是,我想将“@ActiveProfiles”移动到TestConfigWrapper中,但这样做不会得到响应,应用程序上下文也不会加载任何数据源

这意味着我必须用@ActiveProfile注释每个集成测试,这实际上意味着它将成为集成测试锅炉板,并且很容易阻碍未来的重构


有没有一种方法可以使用java config实现这一点?

根据Hippoom的评论使用抽象类来配置测试:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={WebAppInitializer.class})
@ActiveProfiles({Profiles.EMBEDDED_DB})
public abstract class ProfiledIntegrationTest {

}

@如果我没有弄错的话,ContextConfiguration和@ActiveProfiles可以被继承,因此虽然不灵活,但您可以将它们放在一个抽象类上,并让每个集成测试都对其进行扩展。完美-以下是我最终使用的:@WebAppConfiguration@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes)={WebAppInitializer.class}@ActiveProfiles({Profiles.EMBEDDED_DB})公共抽象类profiledinintegrationtest{}另一种选择是将此作为注释。然后您只需在测试类上使用该注释。两者的影响应该是相同的。