应用程序上下文文件中应放入的内容。TestContext 框架的工作方式是,它允许您在集成测试的上下文中重用应用程序连接。所以大部分情况下,您在应用程序上下文配置文件中放入的测试没有任何特殊内容。如果您的控制器在您的应用程序中具有服务 bean 依赖项,那么它也会在您的集成测试中具有该依赖项。如果您的 DAO 在您的应用程序中有一个 SessionFactory,那么您的集成测试也是如此。这样,当您编写集成测试时,就不必重新连接所有这些东西。很酷。
I said 大部分情况下上面是因为我至少想到了一个例外。通常,您的应用程序将使用 JNDI 来定位数据源,但在集成测试(至少是容器外集成测试)中,您通常不会有可用的 JNDI 环境。因此,您通常应该将 DataSource bean 创建隔离到单独的文件中,并为您的实时应用程序使用 JNDI 版本和非 JNDI 版本(例如,只需创建一个直接BasicDataSource
,比如说)用于您的集成测试。这是前者的一个例子:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myStoreDS" resource-ref="true"/>
这是后者的一个例子:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="${dataSource.driverClassName}"
p:url="${dataSource.url}"
p:username="${dataSource.username}"
p:password="${dataSource.password}" />
这些将放在单独的文件中。第一个可能会进去beans-datasource.xml
用于正常应用程序使用和第二个beans-datasource-it.xml
用于集成测试。正常应用程序使用和集成测试所常见的配置(即大多数情况下的绝大多数 bean 配置)应该位于一个或多个通用配置文件中。
此外,Spring 3 引入了一个新的jdbc
命名空间允许您创建嵌入式数据库,例如 HSQLDB 数据库或 Derby 数据库等。它看起来像这样:
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:hsql/schema.sql" />
<jdbc:script location="classpath:hsql/test-data.sql" />
</jdbc:embedded-database>
这将取代BasicDataSource
如果你想使用这个,请配置上面描述的。
为什么会发生错误。您看到的错误发生是因为您的@ContextConfiguration
值隐式指示应用程序上下文文件应该位于类路径上。重要的:去除/resources
片。这就是 Maven 的内部结构;当它构建 JAR 或 WAR 时,它会复制contents of the resources
目录到你的类路径中,而不是resources
本身。那应该有帮助。
EDIT:
要解决“未找到符号”错误,您需要将测试依赖项添加到 Maven POM。这也将是 JUnit 和 Spring Test 模块,两者都带有<scope>test</scope>
。此外,如果您使用像 Mockito 这样的模拟框架,您还需要将该依赖项(带有测试范围)添加到您的 POM 中。尝试一下,然后请报告发生了什么。