蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

04-06 阅读 0评论

关于简单循环覆盖法可以看看这里我的上一个文章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 list1 = null;
        public static List list2 = null;
        public static List 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 shoppingCart(List 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:观察原题代码

    发现题中给了这三个列表

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    其中

    list1 = null;

    list2 = new ArrayList();

    list3 为商品列表集合

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    2解题

    目标1、

    当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。

    巧用 list1 = null

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    目标2、简单循环覆盖(0次,1次,2次,m次,n-1次,n次)

    循环的判断

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    1.  0次循环

    2 当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。

    巧用 list2 = new ArrayList()  一个空集合

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    1次循环

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    2次循环

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    m次循环(随便写)

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    n-1次 和 最后一次循环n

    目标3  当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。

    蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)蓝桥杯单元测试专项练习Java版(单元测试4)(修正版)

    以上如有不对还请多多指正

    期间有很多修正,

    在此感谢(半只兔子,姜姜7788)俩位大佬指正与帮助


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]