maven:针对不同的配置运行相同的测试

时间:2012-04-27 09:47:49

标签: spring testing maven surefire

在我的spring + maven应用程序中,我已经为数据访问层创建了一些测试,我现在希望针对多个数据源运行。我有类似的东西:

@ContextConfiguration(locations={"file:src/test/resources/testAppConfigMysql.xml"})
public class TestFooDao extends AbstractTransactionalJUnit38SpringContextTests {
  public void testFoo(){
     ...
  }
} 

目前配置位置是硬编码的,因此它只能用于一个数据源。 两次调用测试并传递两个不同配置的最佳方法是什么(比如testAppConfigMysql.xml和testMyConfigHsqlDb.xml)?

我已经看到过通过系统属性执行此操作的建议。如何告诉maven使用不同的系统属性值调用两次测试?

3 个答案:

答案 0 :(得分:1)

我不知道是否有一些性感和花哨的解决方案,对此也很简单。我只是用所有测试内容实现基类,然后将它继承到具有不同基于注释的配置的2个类中,如下所示:

@ContextConfiguration(locations={"firstDs.xml"})
public class TestFooDaoUsingFirstDs extends TestFooDao {
}

@ContextConfiguration(locations={"secondDs.xml"})
public class TestFooDaoUsingSecondDs extends TestFooDao {
}

除非你必须以这种方式处理大量不同的数据源,否则对我来说没问题。

答案 1 :(得分:0)

而不是file:...,您可以使用classpath:...(删除src/test/resources,如果您使用classpath则隐含它。然后,您可以使用以下行显示单个主上下文:

<import resource="dao-${datasource}.xml" />

如果使用选项-Ddatasource=foo运行Maven构建,它将使用您指定的任何内容替换主上下文中的${datasource}。因此,您可以针对不同的配置设置datasource-foo.xmldatasource-bar.xml等。

(您需要在POM中启用Maven资源过滤才能使其生效)。

或者,查看Spring 3.1中的新内容:http://www.baeldung.com/2012/03/12/project-configuration-with-spring/

编辑:第三个选项是让所有测试类扩展一些超类,并使用 Junit的@Parameterised,其中参数是不同的Spring上下文。在这种情况下你不能使用@ContextConfiguration,但是你总是可以手动创建Spring上下文,然后使用org.springframework.beans.factory.config.AutowireCapableBeanFactory.autowireBean()

自动测试测试类。

答案 2 :(得分:0)

检查maven invoker plugin。它也支持配置文件。