【问题标题】:JUnit trying to test a valid input to see if it returns the correct valueJUnit 尝试测试有效输入以查看它是否返回正确的值
【发布时间】:2022-01-09 09:05:18
【问题描述】:

我正在尝试测试 getPoints 以检查它是否使用 Junit5 测试返回正确的值。

public class Grade {
    private final int points;

    public int getPoints() {
        return points;
    }

    public Grade(int p) throws IllegalArgumentException {
        if(p<1 || p>20) 
            throw new IllegalArgumentException();
        points = p;
    }
}

目前我的测试是:

@Test
    void PointReturnTest() {
        int p = 15;
        assertSame(p,p);
    }

我认为我实际上并没有测试 getPoints,因为它没有链接到我上面的 Junit 测试 ^。我问的原因是因为当我进入时:

 int p = 30;
        assertSame(p,p);

Junit 测试在无效时仍然通过

if(p<1 || p>20) 

有没有更好的测试方法?

编辑: 目前这是我所拥有的:

@Test
    void PointReturnTest() {
        int p = 15;
        Grade grade = new Grade(p);
        assertEquals(p, p.getPoints());
    }

但令人担忧的是它说:“无法在原始类型 int 上调用 getPoints()”

【问题讨论】:

    标签: java eclipse testing junit


    【解决方案1】:

    也许您正在寻找类似的东西?

    @Test
    void PointReturnTest() {
        int p = 15;
        Grade grade = new Grade(p);
        assertEquals(p, grade.getPoints());
    }
    

    【讨论】:

      【解决方案2】:

      使用您的代码:

      @Test
          void PointReturnTest() {
              int p = 15;
              assertSame(p,p);
          }
      

      断言比较 15 和 15.. p 是本地的,不是 Grade 中的 p。

      因此你不能写:

      @Test
          void PointReturnTest() {
              int p = 15;
              Grade grade = new Grade(p);
              **assertEquals(p, p.getPoints());**
          }
      

      p 是局部变量(int)...写grade.getPoints()。正如已经建议的那样

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 2020-05-08
        • 2018-06-09
        • 1970-01-01
        • 2021-11-05
        • 2012-01-02
        相关资源
        最近更新 更多