【问题标题】:IntelliJ test failsIntelliJ 测试失败
【发布时间】:2021-07-03 17:14:01
【问题描述】:

您好,我正在尝试使用测试用例测试我的 Calculator.java 类,但出现此错误:

java.lang.AssertionError: 预期: 但是是:main.Calculator@5bb21b69 预期:3 实际:main.Calculator@5bb21b69

这是我写的测试用例

public class CalculatorTest {
    @Test
    public void testCalculator(){
        Calculator calculator = new Calculator();
        calculator.calculate(5,2,'-');
        Assert.assertEquals(3,calculator);

    }

这是我的计算器课

package main;

public class Calculator {



    public Double calculate(double first, double second, char operator) {
        double result;

        switch (operator) {
        case '+':
            result = first + second;
            break;

        case '-':
            result = first - second;
            break;

        case '*':
            result = first * second;
            break;

        case '/':
            result = first / second;
            break;

        // operator doesn't match any case constant (+, -, *, /)
        default:
            System.out.printf("Error! operator is not correct");
            return null;
        }
        return result;
    }

}

【问题讨论】:

  • 您为什么要尝试将数字与calculator 对象进行比较?
  • 您可能希望将3calculate 返回的值进行比较。一旦您开始尝试比较非整数值,它就会变得有趣。
  • 我明白了……多么简单的问题。谢谢
  • @Oğuz 这并不像你想象的那么容易。浮点数的比较是一个相当复杂的话题。还有一个问题:为什么要使用 Double 包装器作为返回类型?

标签: java testing assertion


【解决方案1】:

您试图断言您的测试结果3 等于您的calculator 对象。您希望断言的第二个参数是计算得到的,而不是calculator 对象。

【讨论】:

  • 是的,我刚刚意识到我正在学习几个小时。谢谢:)
【解决方案2】:
public class CalculatorTest {
    
    @Test
    public void testCalculator() {
        Calculator calculator = new Calculator();
        double actual = calculator.calculate(5, 2, '-');
        Assert.assertEquals(3.0, actual);
    }
}

这个测试会失败,因为你除以双精度数,而不是整数。

【讨论】:

    【解决方案3】:

    你有两个问题:

    • 错误的实际值

    • 浮点数的双重比较错误

       Calculator calculator = new Calculator();
       double value = calculator.calculate(5,2,'-'); // use result from calculation
       Assert.assertTrue(Math.abs(3 - value) <= 0.000001); 
      

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 2019-07-31
      • 2014-11-23
      • 2020-03-15
      • 2016-11-20
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多