前言:最近在学习基于spring框架测试mysql数据库。关于数据库的连接配置总结如下,以备后用
- spring maven工程,首先得配置spring-jdbc和mysql-connector-java,所谓皮之不存毛将焉附
- 然后基于已经导入的jar包,才能在spring xml配置文件里配置数据库DataSource 的bean,这是通用思路,之前没有注意这个顺序,上来就配置bean,由于没有导入jar包,自然会报错,容器无法初始化bean。另外注意需启用上下文<context:property-placeholder >以识别外部属性文件,我们的数据库连接配置就放在外部属性文件中。
<context:property-placeholder location="classpath:*.properties" ignore-unresolvable="true"/>
<import resource="jsf-promotion-consumer.xml"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
外部属性文件db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/yourDbname
jdbc.username=yourUserName
jdbc.password=yourPassword
- 测试数据库是否已连接
- 通过引入spring 的jdbcTemplate操作数据库,配置如下
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
- 通过集成测试框架spock,引入groovy语言包
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.4</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.spockframework/spock-core -->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>1.1-groovy-2.4</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.spockframework/spock-spring 方便集成spring test-->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<version>1.1-groovy-2.4</version>
<scope>test</scope>
</dependency>
- 验证数据库成功连接:
@Title("对外暴露的活动接口测试")
@ContextConfiguration(locations = "classpath*:spring-config.xml")
@Transactional
class ActivityServiceSpec extends Specification {
@Resource
ActivityService activityService
@Autowired
JdbcTemplate jdbcTemplate
@Autowired
DataSource dataSource
@Rollback //测试结束,数据库回归,咋失效了?
def "根据区块ID获取批次和SKU信息"() {
given: "修改数据库区块和区块批次表状态有效状态1,测试完毕回滚数据库"
// way1:利用groovy sql
def sql = new Sql(dataSource)
sql.execute("UPDATE activity_chunk SET STATUS = 1")
sql.execute("UPDATE activity_chunk_batch SET STATUS = 1 ")
// way2:利用spring JdbcTemplate
// jdbcTemplate.execute("UPDATE activity_chunk SET STATUS = 1")
// jdbcTemplate.execute("UPDATE activity_chunk_batch SET STATUS = 1 ")
when: "获取批次和sku信息"
def activityChunkComplete = activityService.getActivityBatch(21)
then: "验证获取结果,选品非空"
activityChunkComplete
println prettyPrint(toJson(activityChunkComplete))
activityChunkComplete.batchList.selectionList
}
}