Java 如何在JUnit中打印错误的结果?
我正在阅读JUnit教程,其中报告了以下示例:Java 如何在JUnit中打印错误的结果?,java,unit-testing,testing,junit,junit5,Java,Unit Testing,Testing,Junit,Junit5,我正在阅读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
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));
第一件事:本教程中的示例并不依赖于JUnit5的发布版本。
它可能依赖于JUnit5测试版。
: 测试失败时的用户调试消息是作为最后一个参数传递的
字符串
在您的示例中,此消息作为第一个参数传递:
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
作为记录,此签名来自JUnit4org.JUnit.Assert
class,其中
定义如下:
static public void assertEquals(String message, long expected, long actual)
我认为在JUnit5的早期测试版中,开发人员依赖JUnit4签名。但有一段时间,他们决定与现有版本有所不同(这对于新的主要版本来说是可以接受的)
现在发布了JUnit5。因此,您应该使代码适应此稳定版本:
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.ZeroIntegers的乘法应返回零:18
10 x 1必须为10==>预期值:但为:
测试运行:1,失败:1,错误:0,跳过:0
我完全看到了理解失败断言所需的所有信息。
用户调试消息:10x1必须是10
预期值:10
实际值:0
第一件事:
本教程中的示例并不依赖于JUnit5的发布版本。
它可能依赖于JUnit5测试版。
:
测试失败时的用户调试消息是作为最后一个参数传递的字符串
在您的示例中,此消息作为第一个参数传递:
assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
作为记录,此签名来自JUnit4org.JUnit.Assert
class,其中
定义如下:
static public void assertEquals(String message, long expected, long actual)
我认为在JUnit5的早期测试版中,开发人员依赖JUnit4签名。但有一段时间,他们决定与现有版本有所不同(这对于新的主要版本来说是可以接受的)
现在发布了JUnit5。因此,您应该使代码适应此稳定版本:
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.ZeroIntegers的乘法应返回零:18
10 x 1必须为10==>预期值:但为:
测试运行:1,失败:1,错误:0,跳过:0
我完全看到了理解失败断言所需的所有信息。
用户调试消息:10x1必须是10
预期值:10
实际值:0
您使用的junit版本是什么,您得到的输出(异常)是什么?异常消息应显示实际值和预期值。该教程中JUnit Jupiter断言和假设的示例不正确。我已经通知了作者。您使用的junit版本是什么?您得到的输出(异常)是什么?异常消息应显示实际值和预期值。该教程中JUnit Jupiter断言和假设的示例不正确。我已经通知了作者。