实验 2** **单元测试实验(共 2 学时)(作业提交时间2024.4.21日前)(自己琢磨的,可能有些地方不太全面,或者有问题,期待各位批评指正)
这里我的环境是intelliJ IDEA 2023.3.6
使用 JUnit 工具,针对 Spring Unit Testing 控制器代码中 ItemController 类进行测试,编 写对应的测试类以完成单元测试,最终提交测试代码。(下面是itemController.java文件内容)
package com.sprint.unittesting.unittesting.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import
com.sprint.unittesting.unittesting.business.ItemBusinessService;
import com.sprint.unittesting.unittesting.model.Item;
@RestController
public class ItemController {
@Autowired
private ItemBusinessService businessService;
@GetMapping("/dummy-item")
public Item dummyItem() {
return new Item(1, "Ball", 10, 100);
}
@GetMapping("/item-from-business-service")
public Item itemFromBusinessService() {
Item item = businessService.retreiveHardcodedItem();
return item;
}
@GetMapping("/all-items-from-database")
public List<Item> retrieveAllItems() {
return businessService.retrieveAllItems();
}
}
实验步骤:
- 创建itemControllerTest类
点击itemController类,Ctrl+shift+T创建。或者右键Goto--test创建。
之后会出现如下界面,选择要测试的方法,和destination package(即你要把测试代码文件放在哪个目录下面),点击OK,就创建好了测试类。
测试类里面只有基本的框架方法,内容需要自己填写。
2.填写测试代码
首先声明 ItemController 和 ItemBusinessService 的 Mock 对象以及 @BeforeEach 方法。
- @InjectMocks 注解表示要将模拟对象注入到被测试的 ItemController 类中。
- @Mock 注解用于创建 ItemBusinessService 的模拟对象。
- @BeforeEach 注解用于在每个测试方法执行之前初始化模拟对象。
其次****编写测试方法:
正常值
- dummyItem() 测试方法用于测试 dummyItem() 方法的行为。
调用 itemController.dummyItem() 方法获取一个虚拟商品对象,并验证其属性是否与预期一致。
预期行为:商品名称应为 "Ball"。商品宽度应为 10。商品高度应为 100。
通过 assertEquals() 方法对实际返回的商品对象属性与预期值进行断言,以确保方法的行为符合预期。
- itemFromBusinessService() 测试方法用于测试 itemFromBusinessService() 方法的行为。
使用 Mockito 模拟 itemBusinessService.retreiveHardcodedItem() 方法的行为,以返回一个模拟的商品对象。然后调用 itemController.itemFromBusinessService() 方法,验证其返回的商品对象是否与模拟对象相等。
- retrieveAllItems() 测试方法用于测试 retrieveAllItems() 方法的行为。
使用 Mockito 模拟 itemBusinessService.retrieveAllItems() 方法的行为,以返回一组模拟的商品对象列表。然后调用 itemController.retrieveAllItems() 方法,验证其返回的商品对象列表是否与模拟列表相等。
最值/边界值/空值:
- dummyItemBoundaryValues()测试边界值。
测试最值时,如果是手工创建,他会自动提示你超出范围,那么就测试边界值吧。
- dummyItemNULL()检查空字符串
当传递空字符串作为参数时,Item对象是否能够正确地处理并将属性设置为空字符串。
- retrieveAllItemsNUll() 检查空列表
3.测试
进行配置
选择自己版本的对应文件配置即可
然后点击运行即可,下面是运行结果。通过!
版权归原作者 听雪-晚梦 所有, 如有侵权,请联系我们删除。