【问题标题】:Eclipse JUnit assertEquals(String, String) - disable square bracket diff in Failure TraceEclipse JUnit assertEquals(String, String) - 在失败跟踪中禁用方括号差异
【发布时间】:2021-10-30 03:46:41
【问题描述】:

JUnit assertEquals Changes String
简而言之:assertEquals("Hello World", "HelloWorld"); 在故障跟踪中显示为expected:<Hello[ ]World> but was:<Hello[]World>
伟大的。绝对没有浪费我的时间试图弄清楚为什么我的解析器会随机抛出方括号。

如何禁用此功能?

我正在为 Java 使用 Eclipse 4.19.0,JUnit 4.10。

【问题讨论】:

  • 这不是问题,IMO - 并且字符串中的区别是除了空格之外的其他一些空格或不可见字符,这些括号可能会为您节省很多时间让您磨练更快地解决问题。
  • @crig 除了我可以双击故障跟踪中的消息并弹出一个突出显示颜色差异的窗口之外。我刚刚用空格和 nbsp 对其进行了测试,它按预期突出显示了空格。但是,在文本中间弹出魔法字符会造成视觉混乱。你能一眼看出这两个字符串之间的区别是什么吗?:expected:<[?]`foo`> but was:<[%[]`foo`> 如果你需要眯着眼睛看看哪个[ 是实际字符串的一部分,这不是问题。
  • 在弹出的窗口中没有添加方括号,您可以通过右键菜单选择是否忽略空格以及是否显示空格字符。
  • @NikoO 扫描代码,我认为没有任何方法可以禁用此功能。你现在已经浪费了时间试图解决它,但你会知道未来的。抱歉,我无法为您提供解决方案,有时会出现这种情况。

标签: java eclipse junit


【解决方案1】:

你不能。

这些括号是由junit.framework.ComparisonCompactor 添加的,在org.junit.ComparisonFailure 断言错误的getMessage 方法中使用(这个错误是由assertEquals 顺便抛出的)

// ComparisonFailure class
public String getMessage() {
    return new ComparisonCompactor(MAX_CONTEXT_LENGTH, fExpected, fActual).compact(super.getMessage());
}

ComparisonCompactor 中,这些括号是硬编码的,似乎没有可以提供的配置,也无法注入ComparisonCompactorComparisonFailure 也是如此 - 您无法为它们提供自定义实现)

public class ComparisonCompactor {

    private static final String ELLIPSIS= "...";
    private static final String DELTA_END= "]";
    private static final String DELTA_START= "[";

    // ...

    private String compactString(String source) {
        String result= DELTA_START + source.substring(fPrefix, source.length() - fSuffix + 1) + DELTA_END;

据我所知,即使在 Junit 4.13 中,它看起来也完全一样,因此即使增加依赖关系也无济于事(但是您可以尝试使用 Junit5,使用 Assertions.assertEquals 将产生 expected: <Hello world> but was: <Helloworld> 输出 - 但是显然它不会只是增加依赖版本)

顺便说一句 Eclipse 与它无关,在其他 IDE(或控制台)中会得到相同的输出


我的建议(但这不是您问题的答案)是使用 AssertJ 之类的断言库,它可以为您提供更多控制权,同时也让您的断言更加流畅。

AssertJ 中的示例如下所示

assertThat("Hello World").isEqualTo("HelloWorld");

并且正在生产

Expecting:
 <"Hello World">
to be equal to:
 <"HelloWorld">
but was not.

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 2016-03-06
    • 2020-02-02
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多