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

关于简单循环覆盖法可以看看这里我的上一个文章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;}@Overridepublic 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) {// 当购物车为 nullif(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;@Beforepublic void setUp(){// 创建被测类实例goodsService = new GoodsService();datas = new Datas();}@Afterpublic void tearDown(){// 释放被测类实例goodsService = null;datas = null;}@Testpublic void testShoppingCartIsNull(){// 购物车不存在的情况datas.list1 =  goodsService.shoppingCart(null, datas.g1);Assert.assertNotNull(datas.list1);Assert.assertEquals(datas.g1, datas.list1.get(0));}@Testpublic void testShoppingCart00(){// 0次循环datas.list2 = goodsService.shoppingCart(datas.list2, datas.g1);Assert.assertEquals(4, datas.list3.get(0).getQuantity());}@Testpublic void testShoppingCart01(){// 1次循环datas.list3 = goodsService.shoppingCart(datas.list3, datas.g1);Assert.assertEquals(4, datas.list3.get(0).getQuantity());}@Testpublic void testShoppingCart02(){// 2次循环datas.list3 = goodsService.shoppingCart(datas.list3, datas.g2);Assert.assertEquals(4, datas.list3.get(1).getQuantity());}@Testpublic void testShoppingCart05(){// m次datas.list3 = goodsService.shoppingCart(datas.list3, datas.g5);Assert.assertEquals(4, datas.list3.get(4).getQuantity());}@Testpublic void testShoppingCart08(){// n-1次datas.list3 = goodsService.shoppingCart(datas.list3, datas.g8);Assert.assertEquals(4, datas.list3.get(7).getQuantity());}@Testpublic void testShoppingCart09(){// n次datas.list3 = goodsService.shoppingCart(datas.list3, datas.g9);Assert.assertEquals(4, datas.list3.get(8).getQuantity());    }@Testpublic 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)俩位大佬指正与帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶_交通标志识别:各目标检测算法评测

自动驾驶|交通标志识别&#xff1a;各目标检测算法评测 论文题目&#xff1a;Evaluation of Deep Neural Networks for traffic sign detection systems 开源代码&#xff1a;https://github.com/aarcosg/traffic-sign-detection 附赠自动驾驶学习资料和量产经验&#xff1a;…

计算机视觉——基于傅里叶幅度谱文档倾斜度检测与校正

概述 在计算机视觉领域&#xff0c;处理文档数据时&#xff0c;OCR算法的性能往往会受到文档的倾斜度影响。如果文档在输入到模型之前没有经过恰当的校正&#xff0c;模型就无法期待模型能够提供准确的预测结果&#xff0c;或者模型预测的精度会降低。例如&#xff0c;在信息提…

助力蓝桥杯单片机省一————模块之超声波

距离蓝桥杯单片机省赛还有7天 本次介绍的模块是超声波模块&#xff0c;将使用定时器1和PCA进行距离的测量。如果对PCA还未了解的&#xff0c;可以打开官方给的芯片数据手册&#xff0c;自行查看。 一、超声波测量原理 二、产生8个40KHz的超声波 void Init_wave() {unsigned …

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因&#xff0c;您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是&#xff0c;这种情况经常发生在 iDevice 缺乏备份的情况下。 &#xff08;iPhone消息消失还占用空间&#xff1f;&…

实际项目中如何使用Git做分支管理

前言 Git是一种强大的分布式版本控制系统&#xff0c;在实际项目开发中使用Git进行分支管理是非常常见的做法&#xff0c;因为它可以帮助团队高效的协作和管理项目的不同版本&#xff0c;今天我们来讲讲在实际项目中最常用的Git分支管理策略Git Flow。 常见的Git分支管理策略…

【开源语音项目OpenVoice](一)——实操演示

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

第二十五周代码(蓝桥杯查缺补漏)

2024/03/31 周日 填充 题目链接 【参考代码】 想用暴力&#xff0c;没过 //枚举&#xff0c;未出结果QAQ #include <bits/stdc.h> using namespace std; string s00 "00"; string s11 "11"; int ans 0; //m个问号&#xff0c;子串有2^m…

1-32 异常

一 什么是异常? 1.含义:异与正常状态的显示,控制台显示的结果和预期的结果不一致 2.例如: int[] nums new int[2]; System.out.println(nums[2]); --抛出异常 二 异常分类 1.检测性异常:又称 非运行时异常,一般编写代码过程中编辑器直接报错 2.非检测性异常(常用):又称为…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

让chatGPT控制物理设备

作为自动控制行业的工程师&#xff0c;我们也许最关心的是如何使chatGPT 控制物理设备。我发现许多人仍然停留在传统程序设计的思维阶段&#xff0c;比如让大模型编写一段PLC 代码&#xff0c;或者是生成一些信息模型。 其实大模型具备判断与思考的能力&#xff0c;AI …

ARM v8 Cortex R52内核 02 程序模型 Programmers Model

ARM v8 Cortex R52内核 02 程序模型 Programmers Model 2.1 关于程序模型 Cortex-R52处理器实现了Armv8-R架构。这包括&#xff1a; 所有的异常级别&#xff0c;EL0-EL2。 每个异常级别下的AArch32执行状态。 T32和A32指令集&#xff0c;其中包括&#xff1a; 浮点运算。 …

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求&#xff1a; 使用正则获取腾讯新闻标题内容 网站&#xff1a;https://sports.qq.com/ 代码&#xff1a; import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

【Frida】【Android】 工具篇:ProxyPin抓包详解

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

SSL VPN

1、SSL (Secure Sockets Layer)一种加密的通讯协定,用在使用者与网服器之间 【1】安全套接层 位于传输层和应用层之间,保护应用层的数据(HTTPS(443)=HTTP+TLS) 【2】版本 SSLv2 SSLv3 修改→TLS (Transport Layer Security)安全传输层协议,) 【3】模式 采用…

Linux文件种类、扩展名与目录配置详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 二、Linux文件种类 1、纯…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR&#xff08;精度0.2度内&#xff01;无需训练数据&#xff09; 附赠自动驾驶学习资料和量产经验&#xff1a;链接 写在前面 在自动驾驶车辆的使用寿命内&#xff0c;传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

分布式锁实战

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#x…

python爬虫学习第十五天-------ajax的get和post请求

嗨嗨嗨&#xff01;兄弟姐妹大家好哇&#xff01;今天我们来学习ajax的get和post请求 一、了解ajax Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在 Web 开发中用于创建交互式网页应用程序的技术。通过 Ajax&#xff0c;网页可以在不重新加载整个页面…

一文解析智慧城市,人工智能技术将成“智”理主要手段

长期以来&#xff0c;有关智慧城市的讨论主要围绕在技术进步方面&#xff0c;如自动化、人工智能、数据的公开以及将更多的传感器嵌入城市以使其更加智能化。实际上&#xff0c;智慧城市是一个关于未来的设想&#xff0c;其重要原因在于城市中存在各种基础设施、政治、地理、财…

操作系统(7分)

进程管理 进程的状态 前趋图 表达哪些任务可以先运行&#xff0c;任务间运行的先后顺序。 进程的同步与互斥 在多道程序环境下&#xff0c;操作系统必须采取相应措施处理好进程之间的制约关系。进程同步的主要任务是对多个有制约关系的进程在执行次序上进行协调&#xff0c;…