天天看點

使用testNG進行功能測試

我們使用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);
    }
}