这是创建JUnit测试以实现分支覆盖所需的代码,

    public String toString(int p, int q) {
        if (p > 3 && q < 25) {
            if (p > 50) {
                System.out.println("p/q=" + (p / q));
            } else {
                System.out.println("p+q=" + (p + q));
            }
            if (q < 12) {
                System.out.println("p*q=" + (p * q));
            } else {
                System.out.println("sqrt(p*q)=" + Math.sqrt(p * q));
            }
        } else {
            System.out.println("p-q=" + (p - q));
        }
        return toString();
    }
}


这是我的尝试,

@Test
public void QB2test() {
    Assert.assertEquals(35, toString(15, 20));
}


但是,它显示了我不了解的这些实际结果。


  java.lang.AssertionError:
  预期值:35
  实际的:QB2 @ 61e4705b


我应该如何修改才能获得通过的结果?谢谢

最佳答案

在您的示例中,您使用35声明了方法调用的toString(15,20)的返回值,并且将QB2 @ 61e4705b作为返回值导致测试用例失败。

原因是,作为toString方法的一部分,您正在调用Object类的toString()方法。 Object类的toString()方法始终返回当前对象的字符串表示形式。在这种情况下,它正在返回当前正在运行的类的对象引用。

为了对此进行详细说明,java中的每个类都是直接或间接成为Object类的子级。对象类包含toString()方法。每当我们尝试打印Object引用时,就会在内部调用toString()方法。
无需调用Object类的toString()方法,而是使用一个变量来存储操作的结果并将该变量值返回给该方法的调用者。

请通过下面的Java api链接获得更多信息
https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--

最后,通过测试用例,如下所示更改toString(int x,int y):

public double toString(int p, int q) {
    double result = 0;
    if (p > 3 && q < 25) {
        if (p > 50) {
            result = p / q;
            System.out.println("p/q=" + result);
        } else {
            result = p + q;
            System.out.println("p+q=" + result);
        }
        if (q < 12) {
            result = p * q;
            System.out.println("p*q=" + result);
        } else {
            result = Math.sqrt(p * q);
            System.out.println("sqrt(p*q)=" + result);
        }
    } else {
        result = p - q;
        System.out.println("p-q=" + result);
    }
    return result;
}


我希望这回答了你的问题

10-07 19:27
查看更多