在测试中减少spring ContextConfiguration样板

时间:2014-09-26 13:25:19

标签: java spring

我想知道是否有办法减少我们目前为集成测试编写的样板量。

主要罪魁祸首是ContextConfiguration,我们将7个不同的字符串发送到当前。

我们的一个测试看起来像这样(删除了有效载荷代码):

@ContextConfiguration(locations = {"classpath:properties-config.xml",
        "classpath:dataSources-config.xml",
        "classpath:dao-config.xml",
        "classpath:services-config.xml",
        "classpath:ehcache-config.xml",
        "classpath:test-config.xml",
        "classpath:quartz-services.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
@Category(IntegrationTest.class)
public class TerminalBuntsPDFTest {
    @Autowired
    private JobService jobService;

    @Test
    public void testCode() throws SystemException {
        assertTrue("Success", true);
    }
}

要加载的xml文件的规范占用了大量空间。我们处于一个(非常缓慢的)从xml迁移到注释的过程中,但是在该项目中还有很多工作要做。

我们正在使用spring 3.2。

2 个答案:

答案 0 :(得分:1)

这种模式怎么样:

@ContextConfiguration(locations = {"classpath:properties-config.xml",
        "classpath:dataSources-config.xml",
        "classpath:dao-config.xml",
        "classpath:services-config.xml",
        "classpath:ehcache-config.xml",
        "classpath:test-config.xml",
        "classpath:quartz-services.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
@Category(IntegrationTest.class)
public abstract class BaseTest {
}

// ....

public class TerminalBuntsPDFTest extends BaseTest {
    @Autowired
    private JobService jobService;

    @Test
    public void testCode() throws SystemException {
        assertTrue("Success", true);
    }
}

// ....

public class TerminalBuntsPDFTest2 extends BaseTest {}

这将允许您只在父抽象类中放置一次配置。

答案 1 :(得分:1)

基于注释的方法是创建一个Spring Configuration Java类,如下所示:

@Configuration("testConfig")
@ImportResource({
    "dataSources-config.xml",
    "dao-config.xml",
    "services-config.xml"
})
public class TestConfiguration {

    // TO create a spring managed bean
    @Bean
    MyBean myBean() {
        return new MyBean();
    }

}

然后您可以像这样注释您的测试类以加载配置:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
    classes=TestConfiguration.class,
    loader=AnnotationConfigContextLoader.class
)
@Category(IntegrationTest.class)
public class TerminalBuntsPDFTest {

这只是一个很好的例子,可能不会编译,但应该让你走上正确的轨道

一些相关文档:

http://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html