当前位置:   article > 正文

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

蓝桥杯单元测试专项练习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

  1. package cn.lanqiao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * 测试数据
  6. */
  7. public class Datas {
  8. // 声明集合对象
  9. public static List<Goods> list1 = null;
  10. public static List<Goods> list2 = null;
  11. public static List<Goods> list3 = null;
  12. // 提供商品信息
  13. public static Goods g1 = new Goods(1, "手机", "华为", 3000, 2);
  14. public static Goods g2 = new Goods(2, "手机", "oppo", 2800, 2);
  15. public static Goods g3 = new Goods(3, "手机", "小米", 1800, 2);
  16. public static Goods g4 = new Goods(4, "手机", "vivo", 2600, 2);
  17. public static Goods g5 = new Goods(5, "手机", "荣耀", 1300, 2);
  18. public static Goods g6 = new Goods(6, "手机", "华为", 6000, 2);
  19. public static Goods g7 = new Goods(7, "手机", "oppo", 3800, 2);
  20. public static Goods g8 = new Goods(8, "手机", "小米", 2000, 2);
  21. public static Goods g9 = new Goods(9, "手机", "vivo", 3100, 2);
  22. public static Goods g10 = new Goods(10, "手机", "荣耀", 1700, 2);
  23. static {
  24. list2 = new ArrayList<>();
  25. list3 = new ArrayList<>();
  26. list3.add(g1);
  27. list3.add(g2);
  28. list3.add(g3);
  29. list3.add(g4);
  30. list3.add(g5);
  31. list3.add(g6);
  32. list3.add(g7);
  33. list3.add(g8);
  34. list3.add(g9);
  35. }
  36. }

Goods.java

  1. package cn.lanqiao;
  2. /**
  3. * 商品实体类
  4. */
  5. public class Goods {
  6. // 商品编号
  7. private int id;
  8. // 商品名称
  9. private String name;
  10. // 商品类别
  11. private String type;
  12. // 商品价格
  13. private double price;
  14. // 商品数量
  15. private int quantity;
  16. /**
  17. * 无参
  18. */
  19. public Goods() {
  20. }
  21. /**
  22. * 全参
  23. * @param id 编号
  24. * @param name 名称
  25. * @param type 类别
  26. * @param price 价格
  27. * @param quantity 数量
  28. */
  29. public Goods(int id, String name, String type, double price, int quantity) {
  30. this.id = id;
  31. this.name = name;
  32. this.type = type;
  33. this.price = price;
  34. this.quantity = quantity;
  35. }
  36. public int getId() {
  37. return id;
  38. }
  39. public void setId(int id) {
  40. this.id = id;
  41. }
  42. public String getName() {
  43. return name;
  44. }
  45. public void setName(String name) {
  46. this.name = name;
  47. }
  48. public String getType() {
  49. return type;
  50. }
  51. public void setType(String type) {
  52. this.type = type;
  53. }
  54. public double getPrice() {
  55. return price;
  56. }
  57. public void setPrice(double price) {
  58. this.price = price;
  59. }
  60. public int getQuantity() {
  61. return quantity;
  62. }
  63. public void setQuantity(int quantity) {
  64. this.quantity = quantity;
  65. }
  66. @Override
  67. public String toString() {
  68. return "Goods [id=" + id + ", name=" + name + ", type=" + type + ", price=" + price + ", quantity=" + quantity + "]";
  69. }
  70. }

GoodsService.java

  1. package cn.lanqiao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * 商品管理模块业务逻辑类,本类主要功能描述:
  6. * 1、当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
  7. * 2、当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
  8. * 3、当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。
  9. * 4、当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
  10. */
  11. public class GoodsService{
  12. /**
  13. * 商品加入购物车
  14. * @param list 购物车列表
  15. * @param goods 商品信息
  16. * @return 购物车列表
  17. */
  18. public List<Goods> shoppingCart(List<Goods> list, Goods goods) {
  19. // 当购物车为 null
  20. if(list == null){
  21. // 创建购物车集合对象
  22. list = new ArrayList<>();
  23. // 添加商品信息
  24. list.add(goods);
  25. }else{
  26. boolean flag = false;
  27. for (Goods goods2 : list) {
  28. // 当购物车中已存在商品和添加的商品一致时,商品数量进行叠加
  29. if(goods2.getId() == goods.getId()){
  30. goods2.setQuantity(goods2.getQuantity()+goods.getQuantity());
  31. flag = true;
  32. break;
  33. }
  34. }
  35. // 当添加的商品对象不存在与购物车中时,将商品对象存储到购物车集合列表中
  36. if(!flag){
  37. list.add(goods);
  38. }
  39. }
  40. return list;
  41. }
  42. }

我的解题代码

GoodsServiceTest.java

  1. package cn.lanqiao;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.junit.After;
  5. import org.junit.Assert;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. /**
  9. * 1. 请使用简单循环覆盖法对被测源代码 Goods 和 GoodsService 类中的 shoppingCart 方法设计单元测试用例。
  10. * 2. 请在下方 GoodsServiceTest 类中填写单元测试代码内容。
  11. * 3. 请使用 Datas 类中提供的集合对象和商品对象的数据进行测试。
  12. * 4. 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert 。
  13. */
  14. public class GoodsServiceTest {
  15. // 声明被测类
  16. private GoodsService goodsService;
  17. private Datas datas;
  18. @Before
  19. public void setUp(){
  20. // 创建被测类实例
  21. goodsService = new GoodsService();
  22. datas = new Datas();
  23. }
  24. @After
  25. public void tearDown(){
  26. // 释放被测类实例
  27. goodsService = null;
  28. datas = null;
  29. }
  30. @Test
  31. public void testShoppingCartIsNull(){
  32. // 购物车不存在的情况
  33. datas.list1 = goodsService.shoppingCart(null, datas.g1);
  34. Assert.assertNotNull(datas.list1);
  35. Assert.assertEquals(datas.g1, datas.list1.get(0));
  36. }
  37. @Test
  38. public void testShoppingCart00(){
  39. // 0次循环
  40. datas.list2 = goodsService.shoppingCart(datas.list2, datas.g1);
  41. Assert.assertEquals(4, datas.list3.get(0).getQuantity());
  42. }
  43. @Test
  44. public void testShoppingCart01(){
  45. // 1次循环
  46. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g1);
  47. Assert.assertEquals(4, datas.list3.get(0).getQuantity());
  48. }
  49. @Test
  50. public void testShoppingCart02(){
  51. // 2次循环
  52. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g2);
  53. Assert.assertEquals(4, datas.list3.get(1).getQuantity());
  54. }
  55. @Test
  56. public void testShoppingCart05(){
  57. // m次
  58. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g5);
  59. Assert.assertEquals(4, datas.list3.get(4).getQuantity());
  60. }
  61. @Test
  62. public void testShoppingCart08(){
  63. // n-1次
  64. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g8);
  65. Assert.assertEquals(4, datas.list3.get(7).getQuantity());
  66. }
  67. @Test
  68. public void testShoppingCart09(){
  69. // n次
  70. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g9);
  71. Assert.assertEquals(4, datas.list3.get(8).getQuantity());
  72. }
  73. @Test
  74. public void testShoppingCartNewshop(){
  75. // 商品不存在购物车情况
  76. datas.list3 = goodsService.shoppingCart(datas.list3, datas.g10);
  77. Assert.assertEquals(4, datas.list3.get(9).getQuantity());
  78. }
  79. }

我的解题思路

解题目标要求:

 * 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)俩位大佬指正与帮助

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/281977?site
推荐阅读
相关标签
  

闽ICP备14008679号