行家:运行相同的测试进行不同的配置
在我的春天+ Maven的应用程序,我已经创建了,我现在想对多个数据源运行数据访问层的一些测试。我有类似:行家:运行相同的测试进行不同的配置
@ContextConfiguration(locations={"file:src/test/resources/testAppConfigMysql.xml"})
public class TestFooDao extends AbstractTransactionalJUnit38SpringContextTests {
public void testFoo(){
...
}
}
它目前的配置位置的硬编码的,所以它只能针对一个数据源使用。 调用两次测试并传递两个不同配置(比如testAppConfigMysql.xml和testMyConfigHsqlDb.xml)的最佳方式是什么?
我见过的建议通过系统属性来做到这一点。我如何告诉maven使用系统属性的不同值来调用两次测试?
我不知道是否有一些性感和花哨的解决方案,是简单为好,这一点。我只想实现基类的所有测试的东西,然后继承它分成2个教学班,不同的基于注解的配置,例如:
@ContextConfiguration(locations={"firstDs.xml"})
public class TestFooDaoUsingFirstDs extends TestFooDao {
}
@ContextConfiguration(locations={"secondDs.xml"})
public class TestFooDaoUsingSecondDs extends TestFooDao {
}
除非你必须处理真正大量不同数据源的这种方式,那就是对我来说还可以。
而不是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()
我想运行一次maven并测试两个数据源;在你的解决方案中,我需要运行两次,传递两个数据源变量的值。是否可以在maven surefire插件中设置变量(例如,定义两个执行或某些类型)?我们的目标是在运行mvn test时测试两个数据源测试 – jfu 2012-04-27 10:37:13
是的,这有点痛苦。我没有太多的运气运行故障安全/ surefire插件不止一次 - 他们往往会对输出文件夹等感到困惑。 – artbristol 2012-04-27 10:38:57
但是我有很多的daos美孚,酒吧,...(其中约15),因此,15个测试类TestFooDao,TestBarDao,...在你的解决方案,我不得不加倍类的数量,这是我做的不想要(我也不想把所有的测试合并成一个巨大的类) – jfu 2012-04-27 10:02:51
是的,我知道。但我真的没有看到更好的解决方案。正如我所说的,我完全意识到这个解决方案并不完美,并且会吸引一点点。我刚才想到的另一件事是尝试使用某种JUnit的Theories与Spring配合的命令支持。这意味着你可以放弃Spring上下文的基于注解的配置,并尝试通过调用某种方法来设置它。不过,我不知道Spring API足够好,可以在这里给你一些参考或示例。我不确定它是否真的可行并且工作正常,但我只是想说一下。 – 2012-04-30 09:39:23
另一个想法:可能延长一点点春天测试支持类(如'SpringJUnit4ClassRunner'或周围的一些助手)会解决的情况下,如果没有真正出的现成的解决方案。在我看来,您可以覆盖处理'@ ContextConfiguration'注释的代码片段,并尝试实现自己的逻辑,可能使用接受参数指向多个上下文的自定义注释。 – 2012-04-30 13:10:18