【发布时间】:2011-08-24 16:53:50
【问题描述】:
也许这个问题不是那么清楚,但举个例子,我想我会清楚的。在我的项目中,我有两种测试:集成测试和场景测试。他们都需要一个数据源(带有一个定制的属性占位符)。
在集成测试用例的上下文中,只定义数据源和占位符,如下所示:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<bean id="propertyResolver" class="com.cegeka.bibliothouris.test.MultiThreadedPropertyResolver">
<property name="location"><value>classpath:testContext.properties</value></property>
</bean>
在我的场景测试用例上下文中,我也需要这些对象(连同其他一些东西),但我只想在我的场景上下文中创建一个集成上下文,因此需要某种继承。
我已经在我的场景测试用例中使用classPathApplicationContext 进行了尝试(曾经使用延迟初始化为 true),如下所示:
<bean class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>classpath:overridingTestContext.xml</value>
</list>
</constructor-arg>
</bean>
但他没有在场景上下文中创建dataSource。这是一个很难用谷歌搜索的问题,这就是我在这里问它的原因。我希望有人有解决方案。
【问题讨论】:
-
为什么要搞得这么复杂(两种情况)?为什么不直接引用 secenario 测试用例配置中的集成测试用例配置,构建一个上下文?
-
我不知道你的意思,我是Spring新手,但是scenariotest需要启动一个seleniumserver,一个seleniumhost和一个jettyserver,集成测试不需要。因此,当我运行集成测试时,不需要启动所有这些东西。如果需要第三个测试用例,它也需要使用数据源,我也可以将它导入那里。
-
Johan Sjöberg 在他的回答中描述的是一种从两个配置文件构建一个应用程序上下文的方法——这就是我所说的简单方法(不仅仅是参考集成测试用例配置) secenario 测试用例配置,并构建一个上下文)。你在你的问题中提出的问题(或者我有什么你尝试的)有点不同,你试图有两个不同的上下文,其中一个可以使用另一个(有点像 web 和应用程序上下文)。 -- 无论如何:我会推荐 Johan Sjöberg 的答案。
标签: java xml spring inheritance applicationcontext