单元测试体系(四)-service单元测试例子
单元测试体系目录
序号 | 类型 |
---|---|
1 | 单元测试体系(一)-什么是单元测试? |
2 | 单元测试体系(二)-快速生成单元测试目录结构(eclipse) |
3 | 单元测试体系(三)-controller单元测试例子 |
4 | 单元测试体系(四)-service单元测试例子 |
5 | 单元测试体系(五)-mapper单元测试例子(MyBatis) |
6 | 单元测试体系(六)-异常模块 |
单元测试体系(四)-service单元测试例子
工具: eclipse
项目类型: springBoot
junit常用注解
junit常用注解
@Test(timeout = 10)
测试,该注解必须加到方法上
timeout超时时间,单位是毫秒
终止死循环,当达到设定的值,结束循环
@Ignore
忽略不想被测试的方法,该注解必须加到方法上,也可以加到类上(慎用)
@RunWith(SpringJUnit4ClassRunner.class)
把junit和spring整合到一块,该注解加到类上
@ContextConfiguration(locations = {“classpath:conf/applicationContext.xml”})
用于加载spring配置文件的注解,添加到类上
locations代表spring配置文件路径的数组,数组的类型为Stirng
classpath:这个东西代表从源包下开始寻找
@Resource(name = “blogService”)
注入属性的注解,就相当于set、get方法,name指明bean的id值
@Before
在所有方法之前执行,一般加到方法上
@After
在所有方法之后执行,一般加到方法上
@Transactional
@TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true)
上边这俩注解要一块用,用于事物控制,加到类上
transactionManager代表配置文件中事务管理器bean的id值
defaultRollback代表事物回滚,默认值为true,是回滚的
assert常用方法
Assert.assertEquals(“message”,A,B):
判断对象A和B是否相等,这个判断比较时调用了equals()方法。
Assert.assertSame(“message”,A,B):
判断对象A和B是否相同,使用的是==操作符。
Assert.assertTure(“message”,A):
判断A条件是否为真。
Assert.assertFalse(“message”,A):
判断A条件是否不为真。
Assert.assertNotNull(“message”,A):
判断A对象是否不为null
Assert.assertArrayEquals(“message”,A,B):
判断A数组与B数组是否相等。
公用注解
@WebMvcTest
主要用于controller层测试,只覆盖应用程序的controller层,HTTP请求和响应是Mock出来的,因此不会创建真正的连接。因此需要创建 MockMvc bean进行模拟接口调用
@RunWith(SpringRunner.class)
@RunWith(SpringJUnit4ClassRunner)
是Junit和Spring Boot test联系的桥梁
@Slf4j
日志
基于mock的隔离测试和基于dbunit的普通测试
可以分为两种:基于mock的隔离测试和基于dbunit的普通测试。
隔离测试主要通过@Mock和@InjectMocks两个注解来实现模拟与被模拟。
(假的) @Mock:模拟出一个Mock对象,对象是空的,需要指明对象调用什么方法,传入什么参数时,返回什么值
when(tSettleDayPgcbMapper.query(aggregateQueryVo)).thenReturn(list);(配合@Mock使用,造假数据)
@InjectMocks:依赖@Mock对象的类,也即是被测试的类。@Mock出的对象会被注入到@InjectMocks对象中
初始化后 @Mock, @Spy, @InjectMocks等注解时
使用: MockitoAnnotations.initMocks(this)
例子:
@RunWith(SpringJUnit4ClassRunner.class)
@Slf4j
public class TestQueryServiceImplTest {
private TestQueryVo aggregateQueryVo;
//日志信息
private static String DY_MSG = "";
private final static String DY_MSG1 = "单元测试【TestQueryServiceImplTest】 FdQuery";
/**月结数据查询*/
@Mock
private ElectricityBalanceMapper electricityBalanceMapper;
/**日清汇总查询*/
@Mock
private TSettleDayPgcbMapper tSettleDayPgcbMapper;
//这是依赖dao的service,injectmocks注解表示你要注入的目标
@InjectMocks
private TestQueryServiceImpl service;
static{
DY_MSG = DY_MSG1 ;
}
@Before
public void setUp(){
log.info("{}--start!!!!",DY_MSG);
//模拟返回值
List<TSettleDayPgcb> list = new ArrayList<TSettleDayPgcb>();
//组装数据 start
TSettleDayPgcb vo = new TSettleDayPgcb();
vo.setTradeDate("202008");
list.add(vo);
//end
@SuppressWarnings("resource")
Scanner s = new Scanner(System.in);
String g = s.next().toString();
aggregateQueryVo = new TestQueryVo();
aggregateQueryVo.setTradeDate(g);
MockitoAnnotations.initMocks(this);
when(tSettleDayPgcbMapper.query(aggregateQueryVo)).thenReturn(list);
}
@Test
public void testFdQuery() {
AggregateResponseVo<AggregateElectricityVo> fdQuery = service.fdQuery(aggregateQueryVo);
Assert.assertNotNull(fdQuery.getColumnList());
Assert.assertNotNull(fdQuery.getLineList());
}
/**
*
* 结束
* @author yangzhenyu
* @date 2020/08/18
*
* */
@After
public void after(){
log.info("{}--end!!!!",DY_MSG);
}
}
下一篇: 西安十大旅游景点推荐
推荐阅读
-
Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
-
Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
-
单元测试——junit4入门例子
-
【JUnit学习笔记】1:使用JUnit4进行简易单元测试的例子
-
单元测试体系(三)-controller单元测试例子
-
四,android四大组件基础介绍及打电话,发短信简单应用 &单元测试
-
我的Node.js学习之路(四)--单元测试_node.js
-
编写优秀的单元测试(四)测试替身
-
单元测试总结:Dao层、Service层和Controller层
-
Spring对Controller、Service、Dao进行Junit单元测试总结