题目描述
请使用基本路径覆盖法 + 简单循环覆盖法的标准规则,对被测源代码 Goods、GoodsService 类中的 shoppingCart 方法设计单元测试用例。并在 GoodsServiceTest 类中完成单元测试代码,Datas 类中提供了测试数据。
源代码功能
某管理系统中,其中一个业务逻辑接口中实现了商品管理模块中的购物车功能,现根据输入的集合列表和商品对象两个参数实现了购物车添加功能,实现逻辑如下:
- 当向购物车添加商品对象时,购物车集合列表不存在,那么系统会创建购物车集合列表,然后向购物车集合中添加商品信息,并返回商品集合列表。
- 当购物车集合对象为空时,可直接添加商品对象至集合列表中,然后返回商品集合列表。
- 当向购物车添加商品对象,而此商品已存在购物车集合对象列表中时,列表中只会对该商品的数量进行叠加,该商品的其他信息不变,完成操作后返回商品集合列表。
- 当向购物车添加的商品对象,并不存在商品集合列表中,则添加到购物车集合列表中,并返回商品集合列表。
题目要求
- 请使用基本路径覆盖法 + 简单循环覆盖法设计测试用例,使被测代码的路径和循环覆盖率达到 100% 。
- 请使用 Java 语言对应的单元测试框架 JUnit 编写测试代码。
- 测试代码请直接在提供的类文件 GoodsServiceTest.java 中编写。
- 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert。
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);
}
}
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 + "]";
}
}
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;
}
}
package cn.lanqiao;
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;
@Before
public void setUp(){
// 创建被测类实例
goodsService = new GoodsService();
}
@After
public void tearDown(){
// 释放被测类实例
goodsService = null;
}
@Test
public void testShoppingCart01(){
// TODO 请填写单元测试代码
Assert.assertEquals((goodsService.shoppingCart(Datas.list1,Datas.g1)).get(0) , Datas.g1);
}
@Test
public void testShoppingCart02(){
// TODO 请填写单元测试代码
Assert.assertEquals((goodsService.shoppingCart(Datas.list2,Datas.g10)).get(0) , Datas.g10);
}
@Test
public void testShoppingCart03(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g10).get(9) , Datas.g10);
}
@Test
public void testShoppingCart04(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g1).get(0).getQuantity() , 4);
}
@Test
public void testShoppingCart05(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g2).get(1).getQuantity() , 4);
}
@Test
public void testShoppingCart06(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g3).get(2).getQuantity() , 4);
}
@Test
public void testShoppingCart07(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g9).get(8).getQuantity() , 4);
}
@Test
public void testShoppingCart08(){
// TODO 请填写单元测试代码
Assert.assertEquals(goodsService.shoppingCart(Datas.list3, Datas.g10).get(9).getQuantity() , 2);
}
}