【发布时间】:2016-01-06 13:46:00
【问题描述】:
对于基于 Spring 的 Rest API,为了编写 JUnit 测试用例,我需要已建立的数据库连接还是可以有一个模拟数据库。我能得到一些建议吗?
技术栈使用 si: 弹簧MVC, 休眠
【问题讨论】:
标签: java spring hibernate rest junit
对于基于 Spring 的 Rest API,为了编写 JUnit 测试用例,我需要已建立的数据库连接还是可以有一个模拟数据库。我能得到一些建议吗?
技术栈使用 si: 弹簧MVC, 休眠
【问题讨论】:
标签: java spring hibernate rest junit
这取决于您要测试的内容。如果您正在测试服务层,则不应建立与数据库的实际连接。相反,您可以模拟存储库对象,例如使用 Mockito。 Here 是一个如何连接模拟 Repository 对象的示例。
如果你想测试你的数据访问逻辑,你可以考虑使用像 hsqldb 这样的内存数据库,并在测试配置中将其定义为测试数据源。
对于更复杂的集成测试,您可能需要连接到实际数据库
【讨论】:
在您的root-context.xml 下,您可以考虑设置不同的 bean 配置文件。例如:
<beans profile="dev">
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.1.2:3306/mydb"/>
<property name="username" value="admin"/>
<property name="password" value="password"/>
<property name="initialSize" value="3"/>
</bean>
...
</beans>
...
<beans profile="prod">
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.1.3:3306/mydb"/>
<property name="username" value="admin"/>
<property name="password" value="password"/>
<property name="initialSize" value="3"/>
</bean>
...
</beans>
然后在您的 JUnit 测试下,您可以考虑在测试上方使用 @Profile 注释:
@Profile(value="dev")
或者,您可以在application.properties 文件中设置spring.profiles.active 环境属性,或者通过-Dspring.profiles.active=dev 将其作为应用服务器的启动配置
更多信息,您可以阅读Spring docs on Profiles。
【讨论】: