2012-04-27 111 views
5

在我的春天+ Maven的应用程序,我已经创建了,我现在想对多个数据源运行数据访问层的一些测试。我有类似:行家:运行相同的测试进行不同的配置

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

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

我见过的建议通过系统属性来做到这一点。我如何告诉maven使用系统属性的不同值来调用两次测试?

回答

1

我不知道是否有一些性感和花哨的解决方案,是简单为好,这一点。我只想实现基类的所有测试的东西,然后继承它分成2个教学班,不同的基于注解的配置,例如:

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

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

除非你必须处理真正大量不同数据源的这种方式,那就是对我来说还可以。

+0

但是我有很多的daos美孚,酒吧,...(其中约15),因此,15个测试类TestFooDao,TestBarDao,...在你的解决方案,我不得不加倍类的数量,这是我做的不想要(我也不想把所有的测试合并成一个巨大的类) – jfu 2012-04-27 10:02:51

+0

是的,我知道。但我真的没有看到更好的解决方案。正如我所说的,我完全意识到这个解决方案并不完美,并且会吸引一点点。我刚才想到的另一件事是尝试使用某种JUnit的Theories与Spring配合的命令支持。这意味着你可以放弃Spring上下文的基于注解的配置,并尝试通过调用某种方法来设置它。不过,我不知道Spring API足够好,可以在这里给你一些参考或示例。我不确定它是否真的可行并且工作正常,但我只是想说一下。 – 2012-04-30 09:39:23

+0

另一个想法:可能延长一点点春天测试支持类(如'SpringJUnit4ClassRunner'或周围的一些助手)会解决的情况下,如果没有真正出的现成的解决方案。在我看来,您可以覆盖处理'@ ContextConfiguration'注释的代码片段,并尝试实现自己的逻辑,可能使用接受参数指向多个上下文的自定义注释。 – 2012-04-30 13:10:18

0

而不是file:...,你可以使用classpath:...(去掉src/test/resources,它隐含的,如果你使用classpath)。然后你就可以拥有与线单一的主背景:

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

如果你运行Maven构建与选项-Ddatasource=foo,它会与任何你指定更换主上下文的${datasource}。所以你可以有datasource-foo.xml,datasource-bar.xml等你的不同配置。

(您需要启用在POM Maven的资源过滤这个工作)。

或者,看看新的东西,在春季3.1:http://www.baeldung.com/2012/03/12/project-configuration-with-spring/

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

+0

我想运行一次maven并测试两个数据源;在你的解决方案中,我需要运行两次,传递两个数据源变量的值。是否可以在maven surefire插件中设置变量(例如,定义两个执行或某些类型)?我们的目标是在运行mvn test时测试两个数据源测试 – jfu 2012-04-27 10:37:13

+0

是的,这有点痛苦。我没有太多的运气运行故障安全/ surefire插件不止一次 - 他们往往会对输出文件夹等感到困惑。 – artbristol 2012-04-27 10:38:57

相关问题