使用JUnit5测试Grade类getPoints方法返回值及参数合法性的问题
问题解决方案
1 运行报错修复
你遇到的Cannot invoke getPoints() on the primitive type int属于语法错误:你创建的Grade类实例是grade变量,却错误地用int基本类型变量p调用getPoints()方法,修改对应行即可修复基础测试逻辑:
@Test void PointReturnTest() { int p = 15; Grade grade = new Grade(p); // 改用Grade实例调用getPoints方法 assertEquals(p, grade.getPoints()); }
2 完整合理的测试用例实现
为了覆盖Grade类的所有业务逻辑,建议补充边界校验、异常场景的测试,完整测试代码如下:
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class GradeTest { // 测试普通合法参数场景:getPoints返回正确值 @Test void getPoints_returnsCorrectValueForLegalParam() { int input = 15; Grade grade = new Grade(input); assertEquals(input, grade.getPoints()); } // 测试边界合法参数场景:验证边界值校验逻辑正常 @Test void getPoints_returnsCorrectValueAtBoundary() { assertEquals(1, new Grade(1).getPoints()); assertEquals(20, new Grade(20).getPoints()); } // 测试参数小于1的异常场景 @Test void constructor_throwsExceptionWhenParamLessThan1() { assertThrows(IllegalArgumentException.class, () -> new Grade(0)); assertThrows(IllegalArgumentException.class, () -> new Grade(-10)); } // 测试参数大于20的异常场景 @Test void constructor_throwsExceptionWhenParamMoreThan20() { assertThrows(IllegalArgumentException.class, () -> new Grade(21)); assertThrows(IllegalArgumentException.class, () -> new Grade(99)); } }
3 初始测试逻辑问题说明
你最开始编写的测试完全没有实例化Grade类,只是对两个相同的int常量做断言,和目标测试逻辑完全无关,所以无论参数是否符合Grade的校验规则都会测试通过。
内容的提问来源于stack exchange,提问作者Spades
相关产品推荐
相关产品推荐

