我正在阅读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));
答案 0 :(得分:5)
第一件事:
从教程中提取的示例并不依赖于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
类
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运行器将为您输出此消息(默认情况下在控制台和测试报告中)。
例如,假设我写了一个不正确的测试方法实现:
public class MyClass {
public int multiply(int i, int j) {
return 0;
}
}
当我执行这个测试类时:
@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
但是由于我的实施有缺陷,它会返回0
。
现在,当我使用Eclipse,Gradle或Maven运行此测试时,单元测试运行器显示失败(重点是我的):
结果:
测试失败:
MyTests.multiplicationOfZeroIntegersShouldReturnZero:18
10 x 1必须为10 ==> 预期:< 10> 但是:< 0>
测试运行:1,失败:1,错误:0,跳过:0
我完全看到所有必要的信息,以了解失败的断言
用户调试信息:10 x 1 must be 10
预期价值:10
实际值:0