如何在 JUnit 中打印错误结果?
How to print wrong results in JUnit?
我正在阅读 this JUnit 教程,其中报告了这个示例:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class MyTests {
@Test
public void multiplicationOfZeroIntegersShouldReturnZero() {
MyClass tester = new MyClass(); // MyClass is tested
// assert statements
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
assertEquals("0 x 10 must be 0", 0, tester.multiply(0, 10));
assertEquals("0 x 0 must be 0", 0, tester.multiply(0, 0));
}
}
现在,我的问题是:万一测试失败,如何打印(错误的)返回结果?类似于:
assertEquals("0 x 0 must be 0, instead got"+tester.multiply(0, 0), 0, tester.multiply(0, 0));
第一件事:
从教程中提取的示例不依赖于已发布的 JUnit 5 版本。
它可能依赖于 JUnit 5 beta 版本。
public static void assertEquals(int expected, int actual, String message)
测试失败时的用户调试消息是作为最后一个参数传递的 String
。
在您的示例中,此消息作为第一个参数传递:
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
郑重声明,此签名来自 JUnit 4 org.junit.Assert
class 其中
assertEquals()
定义为:
static public void assertEquals(String message, long expected, long actual)
我想在 JUnit 5 的早期测试版中,开发人员依赖于 JUnit 4 签名。但有一次,他们决定与现有的不同(这对于新的主要版本来说是可以接受的)。
现在 JUnit 5 发布了。所以你应该调整你的代码以适应这个稳定版本:
assertEquals(0, tester.multiply(10, 0), "10 x 0 must be 0");
要回答您的问题,您无需考虑如何显示此消息。
如果测试失败,JUnit 运行ner 将为您输出此消息(默认情况下在控制台和测试报告中)。
例如,假设我编写了一个错误的测试方法实现:
public class MyClass {
public int multiply(int i, int j) {
return 0;
}
}
当我执行这个测试时 class :
@Test
public void multiplicationOfZeroIntegersShouldReturnZero() {
MyClass tester = new MyClass(); // MyClass is tested
// assert statements
assertEquals(0, tester.multiply(10, 0), "10 x 0 must be 0");
assertEquals(0, tester.multiply(0, 10), "0 x 10 must be 0");
assertEquals(0, tester.multiply(0, 0), "0 x 0 must be 0");
assertEquals(10, tester.multiply(10, 1), "10 x 1 must be 10");
}
最后一个断言失败,因为 10 * 1
应该等于 10
但由于我有缺陷的实现,它 returns 0
.
现在,当我 运行 使用 Eclipse、Gradle 或 Maven 进行此测试时,单元测试 运行ner 显示失败(重点是我的):
Results :
Failed tests:
MyTests.multiplicationOfZeroIntegersShouldReturnZero:18
10 x 1 must be 10 ==> expected: <10> but was: <0>
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
我清楚地看到了理解失败断言所需的所有信息。
用户调试消息:10 x 1 must be 10
期望值:10
实际值:0
我正在阅读 this JUnit 教程,其中报告了这个示例:
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class MyTests {
@Test
public void multiplicationOfZeroIntegersShouldReturnZero() {
MyClass tester = new MyClass(); // MyClass is tested
// assert statements
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
assertEquals("0 x 10 must be 0", 0, tester.multiply(0, 10));
assertEquals("0 x 0 must be 0", 0, tester.multiply(0, 0));
}
}
现在,我的问题是:万一测试失败,如何打印(错误的)返回结果?类似于:
assertEquals("0 x 0 must be 0, instead got"+tester.multiply(0, 0), 0, tester.multiply(0, 0));
第一件事:
从教程中提取的示例不依赖于已发布的 JUnit 5 版本。
它可能依赖于 JUnit 5 beta 版本。
public static void assertEquals(int expected, int actual, String message)
测试失败时的用户调试消息是作为最后一个参数传递的 String
。
在您的示例中,此消息作为第一个参数传递:
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
郑重声明,此签名来自 JUnit 4 org.junit.Assert
class 其中
assertEquals()
定义为:
static public void assertEquals(String message, long expected, long actual)
我想在 JUnit 5 的早期测试版中,开发人员依赖于 JUnit 4 签名。但有一次,他们决定与现有的不同(这对于新的主要版本来说是可以接受的)。
现在 JUnit 5 发布了。所以你应该调整你的代码以适应这个稳定版本:
assertEquals(0, tester.multiply(10, 0), "10 x 0 must be 0");
要回答您的问题,您无需考虑如何显示此消息。
如果测试失败,JUnit 运行ner 将为您输出此消息(默认情况下在控制台和测试报告中)。
例如,假设我编写了一个错误的测试方法实现:
public class MyClass {
public int multiply(int i, int j) {
return 0;
}
}
当我执行这个测试时 class :
@Test
public void multiplicationOfZeroIntegersShouldReturnZero() {
MyClass tester = new MyClass(); // MyClass is tested
// assert statements
assertEquals(0, tester.multiply(10, 0), "10 x 0 must be 0");
assertEquals(0, tester.multiply(0, 10), "0 x 10 must be 0");
assertEquals(0, tester.multiply(0, 0), "0 x 0 must be 0");
assertEquals(10, tester.multiply(10, 1), "10 x 1 must be 10");
}
最后一个断言失败,因为 10 * 1
应该等于 10
但由于我有缺陷的实现,它 returns 0
.
现在,当我 运行 使用 Eclipse、Gradle 或 Maven 进行此测试时,单元测试 运行ner 显示失败(重点是我的):
Results :
Failed tests:
MyTests.multiplicationOfZeroIntegersShouldReturnZero:18
10 x 1 must be 10 ==> expected: <10> but was: <0>
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
我清楚地看到了理解失败断言所需的所有信息。
用户调试消息:10 x 1 must be 10
期望值:10
实际值:0