用于大字符串比较的 assertThat 与 assertEquals
assertThat vs assertEquals for big String comparison
每个人都说我们应该使用 Junit 的新 assertThat
,但是,对于大字符串比较,它似乎缺少一些功能。
示例:
@Test
public void testAssertThat() throws Exception {
Assert.assertThat("auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei",
CoreMatchers.equalTo( "auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" ) );
}
@Test
public void testAssertEquals() throws Exception {
Assert.assertEquals( "auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei",
"auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" );
}
assertEquals
打印更易于阅读的错误消息:
org.junit.ComparisonFailure:
expected:<...uihaeuieahuiaehuieah[u]aiehiaueheauihaeuiha...> but
was:<...uihaeuieahuiaehuieah[e]aiehiaueheauihaeuiha...>
而 assertThat
打印此:
java.lang.AssertionError: Expected:
"auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei"
but: was "auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei"
有没有办法获得与 assertThat
相同的行为?
友好的消息 org.junit.ComparisonFailure: expected...
来自这样一个事实,即 JUnit 使用 assertEquals 和 String 作为输入的方式。
这样,如果 String 比较失败,Junit 将抛出 org.junit.ComparisonFailure。
在您的 IDE 中,比较确实更具可读性。例如在Eclipse中,双击失败的Junit测试可以显示字符串比较。
像这样:
AssertThat 具有不同的语义,javadoc 明确指出:
Asserts that actual satisfies the condition specified by matcher. If not, an AssertionError is thrown with information about the matcher and failing value.
顾名思义,AssertionError 的语义范围更广。
总结:如果你想保留 String 的友好信息,你应该继续使用 AssertEquals 进行 String 比较。
每个人都说我们应该使用 Junit 的新 assertThat
,但是,对于大字符串比较,它似乎缺少一些功能。
示例:
@Test
public void testAssertThat() throws Exception {
Assert.assertThat("auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei",
CoreMatchers.equalTo( "auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" ) );
}
@Test
public void testAssertEquals() throws Exception {
Assert.assertEquals( "auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei",
"auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" );
}
assertEquals
打印更易于阅读的错误消息:
org.junit.ComparisonFailure: expected:<...uihaeuieahuiaehuieah[u]aiehiaueheauihaeuiha...> but was:<...uihaeuieahuiaehuieah[e]aiehiaueheauihaeuiha...>
而 assertThat
打印此:
java.lang.AssertionError: Expected: "auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" but: was "auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei"
有没有办法获得与 assertThat
相同的行为?
友好的消息 org.junit.ComparisonFailure: expected...
来自这样一个事实,即 JUnit 使用 assertEquals 和 String 作为输入的方式。
这样,如果 String 比较失败,Junit 将抛出 org.junit.ComparisonFailure。
在您的 IDE 中,比较确实更具可读性。例如在Eclipse中,双击失败的Junit测试可以显示字符串比较。
像这样:
AssertThat 具有不同的语义,javadoc 明确指出:
Asserts that actual satisfies the condition specified by matcher. If not, an AssertionError is thrown with information about the matcher and failing value.
顾名思义,AssertionError 的语义范围更广。
总结:如果你想保留 String 的友好信息,你应该继续使用 AssertEquals 进行 String 比较。