我们使用spring的testng也可以实现像junit一样的功能测试。
1、引入jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<artifactId>commons-dbcp</artifactId>
<groupId>commons-dbcp</groupId>
<version>1.4</version>
</dependency>
2、实现AbstractTestNGSpringContextTests类
引入启动容器的配置文件,这些配置文件在test目录下,只用于测试,一般配置的是测试环境地址分别是context配置、数据源配置和redis配置(如果用到了redis的话)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.BeforeSuite;
@ContextConfiguration(locations = {"classpath:conf/spring/spring-context-test.xml",
"classpath:conf/spring/spring-dal-test.xml","classpath:conf/spring/spring-redis-test.xml"})
public class BaseTestNG extends AbstractTestNGSpringContextTests {
protected Logger LOGGER;
@BeforeSuite(alwaysRun = true)
public void init() {
LOGGER = LoggerFactory.getLogger(this.getClass().getSimpleName());
}
}
首先看spring-context-test.xml,主要是启动包扫描和CGLIB创建代理bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 使用CGLIB自动创建代理Bean -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- 注册相关后置处理器,扫描包路径下的注解配置 -->
<context:component-scan base-package="com.suning.teriste"/>
</beans>
然后是spring-dal-test.xml,配置数据源
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
<!-- DAL客户端接口实现 -->
<bean id="dalClient" class="com.teriste.framework.dal.client.support.DefaultDalClient">
<property name="sqlMapConfigLocation" value="classpath*:conf/sqlMap/sqlMap_*.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="writeDalClient" class="com.test.framework.dal.client.support.DefaultDalClient">
<property name="sqlMapConfigLocation" value="classpath*:conf/sqlMap/sqlMap_*.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 用spring的事务管理 器 -->
<!-- 事务实现begin -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 事务实现end -->
</beans>
3、然后是在测试类中集成testng实现类,注意@Test注解是testng的注解
import com.teriste.BaseTestNG;
import com.teriste.intf.dto.UserInfoDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
public class UserInfoSqlServiceImplTest extends BaseTestNG{
@Autowired
private UserInfoSqlServiceImpl userInfoSqlService;
@Test
public void saveUserInfoTest(){
String userId = "test";
UserInfoDto userInfoDto = new UserInfoDto();
userInfoDto.setDept("111");
userInfoDto.setSalary("222");
userInfoSqlService.saveUserInfo(userId, userInfoDto);
}
}