JUnit单元测试实训报告
- 基本信息
名称: |
JUnit单元测试 |
时间: |
4月22日 |
测试人: | |
学号: | |
年级专业班级: |
22级软件工程专业1班 |
目标: |
理解JUnit作为白盒测试工具的本质,通过编写代码验证方法逻辑的正确性,关注程序内部执行路径的覆盖。 学习JUnit的核心注解(@Test、@Before、@After)和断言方法(如Assert.assertEquals),实现测试用例的独立执行与结果验证。 构建自动化测试能力,提升持续集成与高质量交付工程能力。 |
- 测试思路与测试环境
- 测试思路的具体说明:本次实训围绕一个 Triangle 类进行单元测试,该类用于根据三边判断三角形类型,并计算周长和面积。使用 JUnit Jupiter API 编写测试用例,测试内容包括:构造函数对非法输入的处理、周长和面积计算的准确性、不同三边组合下三角形类型的判断、toString() 方法返回值的正确性。通过设计多组边界值和典型值测试用例,验证软件逻辑的正确性和完整性。
- 测试环境的具体说明:
- 开发工具 :IntelliJ IDEA 2024.1.2
- 测试框架 :JUnit 5.10.2
- 编程语言 :Java 19
- 操作系统 :Windows 11
- 测试内容
- 测试对象分析说明
- 类名: org.example.Triangle
- 该类包含以下主要功能:通过构造函数设置三角形三边并校验有效性(不在1~100之间抛出异常)
- 根据三边判断三角形类型:
- Equilateral(等边)
- Isosceles(等腰)
- RightAngled(直角)
- General(一般三角形)
- NoTriangle(不能构成三角形)
- NoValidTriangle(无效三角形)
- 计算周长和面积:返回三角形类型的中文描述字符串
- 被测方法:
- getType():判断三角形类型
- getArea():计算面积
- getCircumference():计算周长
- toString():返回类型中文名称
- 类名: org.example.Triangle
- 测试步骤说明
- 对失败用例进行分析,定位问题原因。
- 执行所有测试用例,记录运行结果。
- 使用Assertions类中的断言方法进行预期结果与实际结果的比对。
- 利用JUnit编写测试类TriangleTest,使用@Test注解标记测试方法。
- 编写Triangle类,实现各类三角形判断逻辑及计算功能。
- 在IDEA中创建Maven项目,添加JUnit5依赖。
- 具体的测试用例列表
编号 |
测试方法 |
输入数据 |
预期输出/行为 |
实际结果 |
备注 |
1 |
getType01 |
101,101,101 |
抛出Exception |
✅ 成功 |
边长超出范围 |
2 |
getType02 |
50,50,50 |
返回Equilateral |
✅ 成功 |
等边三角形 |
3 |
getType03 |
3,4,8 |
返回NoValidTriangle |
❌ 失败 |
实际返回General |
4 |
getType04 |
3,3,4 |
返回Isosceles |
✅ 成功 |
等腰三角形 |
5 |
getType05 |
3,4,5 |
返回RightAngled |
✅ 成功 |
直角三角形 |
6 |
getType06 |
2,3,4 |
返回General |
✅ 成功 |
一般三角形 |
7 |
getArea |
3,4,5 |
返回6.0 |
✅ 成功 |
符合海伦公式 |
8 |
getCircumference |
3,4,5 |
返回12 |
✅ 成功 |
周长=3+4+5=12 |
9 |
testToString |
3,4,5 |
返回"直角三角形" |
✅ 成功 |
toString结果正确 |
- 测试结果与分析
- 单元测试结果:
- 共执行 9 个测试用例,其中:
- ✅ 成功:8个
- ❌ 失败:1个(getType03)
- 共执行 9 个测试用例,其中:
- 具体分析内容:
- ✅ 成功用例分析
- 所有合法输入均能正确识别为对应三角形类型。
- 异常处理机制有效拦截超范围输入。
- 数学计算准确无误,符合几何公式。
- ❌ 失败用例分析
- 失败测试:getType03(输入3,4,8)
- 预期返回 NoValidTriangle,
- 实际返回 General
- 原因分析:在 getType() 方法中,判断是否能构成三角形时错误地使用了逻辑或 (||),导致只要满足其中一个条件就认为是有效三角形。
- 正确逻辑应为:任意两边之和大于第三边,即三个条件必须同时成立(&&)
- ✅ 成功用例分析
- 总结:本次测试基本覆盖了 Triangle 类的所有功能模块,整体逻辑较为合理。但在三角形合法性判断部分存在逻辑漏洞,导致部分非法输入被误判为有效三角形。建议后续版本中修复此逻辑错误以提高代码健壮性。