利用spring-test+junit进行单元测试

时间:2022-08-26 00:34:32

1、引入相关的包,这里用maven进行管理的

<!--spring test-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
<scope>test</scope>
</dependency>

<!-- ============================junit 依赖项定义 begin============================ -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- ============================junit 依赖项定义 end============================ -->


2、编写好业务层、持久层代码;

ibatis 框架写的crud 实例参考

 <!--查询-->
<select id="findById" resultType="com.ec.test.logic.vo.TestVo" parameterType="String">
SELECT
id,name
FROM t_sys_test
WHERE delFlag ='0'

AND id=#{id}


</select>

<!--逻辑删除-->
<update id="delFlag" parameterType="String">
UPDATE t_sys_test SET
delFlag='1'
where id=#{id}
</update>
<!--物理删除-->
<delete id="delete" parameterType="String">
delete from t_sys_test where id=#{id}
</delete>

<!--更新-->
<update id="update" parameterType="com.ec.test.logic.vo.TestVo">
UPDATE t_sys_test SET
<if test="name != null and name != ''" >
name=#{name},
</if>
<if test="type != null and type != ''" >
type=#{type},
</if>
<if test="status != null and status != ''" >
status=#{status},
</if>
updTime=#{updTime},
updUserId=#{updUserId},
updMark=#{updMark}
where id=#{id}
</update>

<!--插入-->
<insert id="insert" parameterType="com.ec.test.logic.vo.TestVo">
INSERT INTO t_sys_test (id,
name,
type,
status,
delFlag,
addTime,
addUserId,
addMark,
updTime,
updUserId,
updMark,
rec_code
)
VALUES (
#{id},
#{name},
#{type},
#{status},
#{delFlag},
#{addTime},
#{addUserId},
#{addMark},
#{updTime},
#{updUserId},
#{updMark},
#{rec_code}
)
</insert>
3、在test的同级目录下新建Test【业务类名】的测试类,里面部分代码实例如下

package test.impl;

import com.ec.common.utils.DefaultFieldValueUtils;
import com.ec.test.logic.interfaces.TestService;
import com.ec.test.logic.vo.TestVo;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;


/**
* junit 测试实例
* Created by liuqi on 2017-05-11.
*/
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration
({"classpath:spring-context.xml"}) //加载配置文件

//------------如果加入以下代码,所有继承该类的测试类都会遵循该配置,也可以不加,在测试类的方法上///控制事务,参见下一个实例
//这个非常关键,如果不加入这个注解配置,事务控制就会完全失效!
@Transactional
//这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时//指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TestTest {
private static final Logger logger = LoggerFactory.getLogger(TestTest.class);
//自动装配spring应用上下文bean
@Autowired
private ApplicationContext context;
TestService testServiceImpl=null;

//测试实例化之前加载服务
@Before
public void before(){
logger.info("获取对象");
testServiceImpl=(TestService)context.getBean("testServiceImpl");
}



@Test //标明是测试方法
@Transactional //标明此方法需使用事务
@Rollback(false) //标明使用完此方法后事务不回滚,true时为回滚
public void testSayHellow( ) {
logger.info(testServiceImpl.sayHellow("simpo"));
}


/*
* 插入
* */
@Test
@Transactional
@Rollback(false)
public void testInsert(){
TestVo vo=new TestVo();
vo.setId("1");
// vo.setId(UUID.randomUUID().toString());
vo.setName("测试1");
vo.setType("1");
vo.setStatus("1");
DefaultFieldValueUtils.setCommonField4Insert(vo,"测试页面","1");
assertEquals(testServiceImpl.insert(vo),1);//判断两个值是否相等
}
/**
* 查询
*/
@Test
@Transactional
@Rollback(false)
public void testfindById( ) {
TestVo tv=testServiceImpl.findById("1");
assertNotNull(tv);//判断对象是否为不为空
}


/*
* 更新
* */
@Test
@Transactional
@Rollback(false)
public void testUpdate(){
TestVo vo=testServiceImpl.findById("1");
// vo.setId(UUID.randomUUID().toString());
vo.setName("测试33");
vo.setType("3");
vo.setStatus("3");
DefaultFieldValueUtils.setCommonField4Update(vo,"测试页面","3");
assertEquals(testServiceImpl.update(vo),1);
}

/*
* 逻辑删除
* */
@Test
@Transactional
@Rollback(false)
public void testDelFlag(){
assertEquals(testServiceImpl.delFlag("1"),1);
}

/*
* 物理删除
* */
@Test
@Transactional
@Rollback(true)
public void testDelete(){
assertEquals(testServiceImpl.delete("1"),1);
}

}