关于简单循环覆盖法可以看看这里我的上一个文章http://t.csdnimg.cn/k92fn\
题目4链接:单元测试专项练习(Java+Python) - 第四题单元测试题目(Java) - 蓝桥云课 (lanqiao.cn)
目录
题目描述
源代码功能
原题:
Datas.java
Goods.java
GoodsService.java
我的解题代码
GoodsServiceTest.java
我的解题思路
1:观察原题代码
题目描述
请使用基本路径覆盖法 + 简单循环覆盖法的标准规则,对被测源代码 Goods、GoodsService 类中的 shoppingCart 方法设计单元测试用例。并在 GoodsServiceTest 类中完成单元测试代码,Datas 类中提供了测试数据。
源代码功能
某管理系统中,其中一个业务逻辑接口中实现了商品管理模块中的购物车功能,现根据输入的集合列表和商品对象两个参数实现了购物车添加功能,实现逻辑如下:
当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
原题:
Datas.java
package cn.lanqiao;import java.util.ArrayList;import java.util.List;/** * 测试数据 */public class Datas { // 声明集合对象 public static List<Goods> list1 = null; public static List<Goods> list2 = null; public static List<Goods> list3 = null; // 提供商品信息 public static Goods g1 = new Goods(1, "手机", "华为", 3000, 2); public static Goods g2 = new Goods(2, "手机", "oppo", 2800, 2); public static Goods g3 = new Goods(3, "手机", "小米", 1800, 2); public static Goods g4 = new Goods(4, "手机", "vivo", 2600, 2); public static Goods g5 = new Goods(5, "手机", "荣耀", 1300, 2); public static Goods g6 = new Goods(6, "手机", "华为", 6000, 2); public static Goods g7 = new Goods(7, "手机", "oppo", 3800, 2); public static Goods g8 = new Goods(8, "手机", "小米", 2000, 2); public static Goods g9 = new Goods(9, "手机", "vivo", 3100, 2); public static Goods g10 = new Goods(10, "手机", "荣耀", 1700, 2); static { list2 = new ArrayList<>(); list3 = new ArrayList<>(); list3.add(g1); list3.add(g2); list3.add(g3); list3.add(g4); list3.add(g5); list3.add(g6); list3.add(g7); list3.add(g8); list3.add(g9); }}
Goods.java
package cn.lanqiao;/** * 商品实体类 */public class Goods { // 商品编号 private int id; // 商品名称 private String name; // 商品类别private String type; // 商品价格private double price; // 商品数量private int quantity; /** * 无参 */ public Goods() { } /** * 全参 * @param id 编号 * @param name 名称 * @param type 类别 * @param price 价格 * @param quantity 数量 */ public Goods(int id, String name, String type, double price, int quantity) { this.id = id; this.name = name; this.type = type; this.price = price; this.quantity = quantity; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } @Override public String toString() { return "Goods [id=" + id + ", name=" + name + ", type=" + type + ", price=" + price + ", quantity=" + quantity + "]"; }}
GoodsService.java
package cn.lanqiao;import java.util.ArrayList;import java.util.List;/** * 商品管理模块业务逻辑类,本类主要功能描述: * 1、当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。 * 2、当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。 * 3、当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。 * 4、当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。 */public class GoodsService{ /** * 商品加入购物车 * @param list 购物车列表 * @param goods 商品信息 * @return 购物车列表 */ public List<Goods> shoppingCart(List<Goods> list, Goods goods) { // 当购物车为 null if(list == null){ // 创建购物车集合对象 list = new ArrayList<>(); // 添加商品信息 list.add(goods); }else{ boolean flag = false; for (Goods goods2 : list) { // 当购物车中已存在商品和添加的商品一致时,商品数量进行叠加 if(goods2.getId() == goods.getId()){ goods2.setQuantity(goods2.getQuantity()+goods.getQuantity()); flag = true; break; } } // 当添加的商品对象不存在与购物车中时,将商品对象存储到购物车集合列表中 if(!flag){ list.add(goods); } } return list; } }
我的解题代码
GoodsServiceTest.java
package cn.lanqiao; import java.util.ArrayList;import java.util.List; import org.junit.After;import org.junit.Assert;import org.junit.Before;import org.junit.Test; /** * 1. 请使用简单循环覆盖法对被测源代码 Goods 和 GoodsService 类中的 shoppingCart 方法设计单元测试用例。 * 2. 请在下方 GoodsServiceTest 类中填写单元测试代码内容。 * 3. 请使用 Datas 类中提供的集合对象和商品对象的数据进行测试。 * 4. 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert 。 */public class GoodsServiceTest { // 声明被测类 private GoodsService goodsService; private Datas datas; @Before public void setUp(){ // 创建被测类实例 goodsService = new GoodsService(); datas = new Datas(); } @After public void tearDown(){ // 释放被测类实例 goodsService = null; datas = null; } @Test public void testShoppingCartIsNull(){ // 购物车不存在的情况 datas.list1 = goodsService.shoppingCart(null, datas.g1); Assert.assertNotNull(datas.list1); Assert.assertEquals(datas.g1, datas.list1.get(0)); } @Test public void testShoppingCart00(){ // 0次循环 datas.list2 = goodsService.shoppingCart(datas.list2, datas.g1); Assert.assertEquals(4, datas.list3.get(0).getQuantity()); } @Test public void testShoppingCart01(){ // 1次循环 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g1); Assert.assertEquals(4, datas.list3.get(0).getQuantity()); } @Test public void testShoppingCart02(){ // 2次循环 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g2); Assert.assertEquals(4, datas.list3.get(1).getQuantity()); } @Test public void testShoppingCart05(){ // m次 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g5); Assert.assertEquals(4, datas.list3.get(4).getQuantity()); } @Test public void testShoppingCart08(){ // n-1次 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g8); Assert.assertEquals(4, datas.list3.get(7).getQuantity()); } @Test public void testShoppingCart09(){ // n次 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g9); Assert.assertEquals(4, datas.list3.get(8).getQuantity()); } @Test public void testShoppingCartNewshop(){ // 商品不存在购物车情况 datas.list3 = goodsService.shoppingCart(datas.list3, datas.g10); Assert.assertEquals(4, datas.list3.get(9).getQuantity()); } }
我的解题思路
解题目标要求:
* 1、当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
* 2、当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
* 3、当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。
* 4、当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
1:观察原题代码
发现题中给了这三个列表
其中
list1 = null;
list2 = new ArrayList<>();
list3 为商品列表集合
2解题
目标1、
当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
巧用 list1 = null
目标2、简单循环覆盖(0次,1次,2次,m次,n-1次,n次)
循环的判断
1. 0次循环
2 当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
巧用 list2 = new ArrayList<>() 一个空集合
1次循环
2次循环
m次循环(随便写)
n-1次 和 最后一次循环n
目标3 当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
以上如有不对还请多多指正
期间有很多修正,
在此感谢(半只兔子,姜姜7788)俩位大佬指正与帮助