Java JUnit测试,以实现分支覆盖



这是我创建 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:
Expected :35 实际 :QB2@61e4705b

我应该如何修改以达到通过的结果?谢谢

在您的示例中,您用 35 断言方法 调用 - toString(15, 20( 的返回值,并且您正在获得QB2@61e4705b作为返回值,从而导致您的测试用例失败。

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

为了详细说明这一点,java中的每个类都是直接或间接的对象类的子类。对象类包含 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;
}

我希望这能回答你的问题

实际 :QB2@61e4705b 是对象引用。您正在比较对象引用。 将对象引用转换为值,然后尝试一下。

您正在尝试将字符串对象与整数进行比较。

最新更新