You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:45:07