如何让 AssertTrue 指示为什么测试像 AssertEquals 一样失败?

How to let AssertTrue indicate why a test failed like AssertEquals?

AssertEquals

assertEquals(5,assignment.getAssignment());

结果:

Running tests
Test running started
junit.framework.AssertionFailedError: expected:<5> but was:<1       1       1       1       1       >
at com.it030.numbersequences.AssignmentTest.testAssignmentAndPossibleAnswers(AssignmentTest.java:12)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)

而且很清楚哪里出了问题。


AssertTrue

Assert.assertTrue(assignment.getAssignment().replaceAll("\s", "")
    .matches("^1(1((1){3}|235)|361015)$"));

结果:

Running tests
Test running started
junit.framework.AssertionFailedError
at com.it030.numbersequences.AssignmentTest.testAssignmentAndPossibleAnswers(AssignmentTest.java:14)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)

目前还不清楚哪里出了问题。

所有 assert* 方法都有一个变体,您可以在其中添加一个在测试失败时显示的字符串。

所以只需使用这个来添加一条消息,其中包含有关失败的更多上下文。

 public static void assertTrue(String message,
                          boolean condition)

示例:

String replaced = assignment.getAssignment().replaceAll("\s", "");
String msg = replaced+" does not match regexp ^1(1((1){3}|235)|361015)$";
Assert.assertTrue(msg , replaced
      .matches("^1(1((1){3}|235)|361015)$"));

结果:

Running tests
Test running started
junit.framework.AssertionFailedError: 2461016 does not match regexp ^1(1((1){3}|235)|361015)$
at com.it030.numbersequences.AssignmentTest.testAssignmentAndPossibleAnswers(AssignmentTest.java:18)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1729)