【问题标题】:Easy test but mistake: "," or "." difference in calculated and expected values容易测试但错误:“,”或“。”计算值和预期值的差异
【发布时间】:2021-12-23 03:33:13
【问题描述】:

当我要做一些检查时,例如等于预期值 17.41 和计算值(通过 3 个边的三角形区域),计算值显示相同的数字,但带有逗号“,”,这就是测试失败的原因。

org.opentest4j.AssertionFailedError:

预计:17.41

实际:17,41

我该怎么办?抱歉,这是我进行 QA 的第一步,似乎我不知道一些简单的事情))

public class TriangleSquareCalculator {
    public TriangleSquareCalculator() {}

    public double getTriangleSquare(int a, int b, int c) throws Exception {
        if ((a | b | c) <= 0) throw new Exception("Сторона треугольника не может быть меньше, либо равно 0");
        else {
            double s = ((a + b + c) / 2.0) * ((a + b + c) / 2.0 - a) * ((a + b + c) / 2.0 - b) * ((a + b + c) / 2.0 - c);
            return Math.sqrt(s);
       }
    }
}

@Test
    @DisplayName("Проверка выброса исключения при длине стороны треугольника <=0")
    void exeptionIsTriangleSidePositive () throws Exception {
        TriangleSquareCalculator result = new TriangleSquareCalculator();
        Assertions.assertThrows(Exception.class, ()-> result.getTriangleSquare(-3,7,8));
    }

    @Test
    @DisplayName("Проверка проверка правильности рассчета")
    void calculationCheck () throws Exception {
        TriangleSquareCalculator result2 = new TriangleSquareCalculator();
        Assertions.assertEquals(17.41,String.format("%.2f", (result2.getTriangleSquare(7,5,9))));
    }
 }

【问题讨论】:

  • 你可以断言(result2.getTriangleSquare(7,5,9) -17.41) &lt; 0.01
  • 您可以在 String.format 调用中指定 Locale 以控制如何将其转换为字符串,但最好将其声明为双精度值。
  • 谢谢,我也会在这个项目中使用这个断言。

标签: java junit junit-jupiter webui


【解决方案1】:

更有可能 17.41(双精度)不等于字符串“17.41”。

JUnit 附带了一个专门用于比较双精度的方法:

assertEquals(17.41, result2.getTriangleSquare(7, 5, 9), .01);

(或者 .01 可能有点过于宽松,但你明白了)。

编辑:不知何故,我确定 Assertions 不是 JUnit 的类,但它是;编辑为特定于 junit 的文本。

【讨论】:

  • 谢谢,它有效!!!
【解决方案2】:

在这一行

Assertions.assertEquals(17.41,String.format("%.2f"(result2.getTriangleSquare(7,5,9))));

您正在比较一个字符串(在右侧)和一个双精度值(在左侧)。 您可以选择上述选项之一以使其正确...

//Option 1 - Compare strings
Assertions.assertEquals("17,41",String.format("%.2f"(result2.getTriangleSquare(7,5,9))));

//Option 2 - Compare numeric values
var precision = 0.01
assertEquals(17.41, result2.getTriangleSquare(7,5,9), precision);

这能解决您的问题吗?在 cmets 中告诉我。

【讨论】:

  • 太棒了,谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 2018-05-22
  • 1970-01-01
  • 2015-04-07
  • 2020-04-26
  • 2021-02-17
相关资源
最近更新 更多