没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/88550351/bg2.jpg)
不进行测试:没有人针对虚基类进行单独地测试;
利用集成测试:很多案例中,直接注入真实依赖对象,然后一起进行集成测试。
针对无效验证问题,在我的文章《那些年,我们写过的无效单元测试》中,介绍了如何识别和解决
单元测试无效验证问题,这里就不再累述了。在本文中,作者收集了一些的Java单元测试典型案
例,主要是为了解决这个测试方法问题。
一、如何测试不可达代码
在程序代码中,由于无法满足进入条件,永远都不会执行到的代码,我们称之为"不可达代码"。不
可达代码的危害主要有:复杂了代码逻辑,增加了代码运行和维护成本。不可达代码是可以由单元
测试检测出来的——不管如何构造单元测试用例,都无法覆盖到不可达代码。
1.1. 案例代码
在下面的案例代码中,就存在一段不可达代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 交易订单服务类
*/
@Service
public class TradeOrderService {
/** 注入依赖对象 */
/** 交易订单DAO */
@Autowired
private TradeOrderDAO tradeOrderDAO;
/**
* 查询交易订单
*
* @param orderQuery 订单查询
* @return 交易订单分页
*/
public PageDataVO<TradeOrderVO> queryTradeOrder(TradeOrderQueryVO orderQu
// 查询交易订单
// 查询交易订单: 总共数量
Long totalSize = tradeOrderDAO.countByCondition(orderQuery);
// 查询交易订单: 数据列表
List<TradeOrderVO> dataList = null;
![](https://csdnimg.cn/release/download_crawler_static/88550351/bg3.jpg)
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
if (NumberHelper.isPositive(totalSize)) {
List<TradeOrderDO> tradeOrderList = tradeOrderDAO.queryByConditio
if (CollectionUtils.isNotEmpty(tradeOrderList)) {
dataList = convertTradeOrders(tradeOrderList);
}
}
// 返回分页数据
return new PageDataVO<>(totalSize, dataList);
}
/**
* 转化交易订单列表
*
* @param tradeOrderList 交易订单DO列表
* @return 交易订单VO列表
*/
private static List<TradeOrderVO> convertTradeOrders(List<TradeOrderDO> t
// 检查订单列表
if (CollectionUtils.isEmpty(tradeOrderList)) {
return Collections.emptyList();
}
// 转化订单列表
return tradeOrderList.stream().map(TradeOrderService::convertTradeOrd
.collect(Collectors.toList());
}
/**
* 转化交易订单
*
* @param tradeOrder 交易订单DO
* @return 交易订单VO
*/
private static TradeOrderVO convertTradeOrder(TradeOrderDO tradeOrder) {
TradeOrderVO tradeOrderVO = new TradeOrderVO();
tradeOrderVO.setId(tradeOrder.getId());
// ...
return tradeOrderVO;
}
![](https://csdnimg.cn/release/download_crawler_static/88550351/bg4.jpg)
由于方法convertTradeOrders(转化交易订单列表)传入的参数tradeOrderList(交易订单列
表)不可能为空,所以“检查订单列表”这段代码是不可达代码。
1.2. 方案1:删除不可达代码(推荐)
最简单的方法,就是删除方法convertTradeOrders(转化交易订单列表)中的不可达代码。
1.3. 方案2:利用不可达代码(推荐)
还有一种方法,把不可达代码利用起来,可以降低方法queryTradeOrder(查询交易订单)的代码
复杂度。
63
}
1
2
3
4
// 检查订单列表
if (CollectionUtils.isEmpty(tradeOrderList)) {
return Collections.emptyList();
}
1
2
3
4
5
6
7
8
9
10
/**
* 转化交易订单列表
*
* @param tradeOrderList 交易订单DO列表
* @return 交易订单VO列表
*/
private static List<TradeOrderVO> convertTradeOrders(List<TradeOrderDO> trade
return tradeOrderList.stream().map(TradeOrderService2::convertTradeOrder)
.collect(Collectors.toList());
}
1
2
/**
* 查询交易订单
![](https://csdnimg.cn/release/download_crawler_static/88550351/bg5.jpg)
1.4. 方案3:测试不可达代码(不推荐)
对于一些祖传代码,有些小伙伴不敢删除代码。在某些情况下,可以针对不可达代码进行单独测
试。
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
*
* @param orderQuery 订单查询
* @return 交易订单分页
*/
public PageDataVO<TradeOrderVO> queryTradeOrder(TradeOrderQueryVO orderQuery)
// 查询交易订单
// 查询交易订单: 总共数量
Long totalSize = tradeOrderDAO.countByCondition(orderQuery);
// 查询交易订单: 数据列表
List<TradeOrderVO> dataList = null;
if (NumberHelper.isPositive(totalSize)) {
List<TradeOrderDO> tradeOrderList = tradeOrderDAO.queryByCondition(or
dataList = convertTradeOrders(tradeOrderList);
}
// 返回分页数据
return new PageDataVO<>(totalSize, dataList);
}
1
2
3
4
5
6
7
8
9
10
11
/**
* 测试: 转化交易订单列表-交易订单列表为空
*
* @throws Exception 异常信息
*/
@Test
public void testConvertTradeOrdersWithTradeOrderListEmpty() throws Exception
List<TradeOrderDO> tradeOrderList = null;
Assert.assertSame("交易订单列表不为空", Collections.emptyList(),
Whitebox.invokeMethod(TradeOrderService1.class, "convertTradeOrders",
}
剩余58页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/fcd62adb0120465d9af280215b0ff722_snowtshan.jpg!1)
阿拉伯梳子
- 粉丝: 1651
- 资源: 5735
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)