You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Junit字符串比较断言失败但预期与实际看似一致的问题咨询

问题根因

报错信息已经明确指出核心问题:

org.opentest4j.AssertionFailedError: expected: java.lang.String@4d5b6aac but was: ss.week2.Setting@3e84448c

  • 断言的预期值是java.lang.String类型,而testLamp.getStatus()实际返回的是自定义的ss.week2.Setting枚举类型实例,二者类型完全不同,equals比较直接返回false,因此断言失败。
  • 肉眼看起来输出一致的原因是:枚举类的默认toString()实现会直接返回枚举项的名称,比如Setting.OFF打印输出内容就是OFF,和字符串"OFF"的控制台展示效果相同,容易造成二者值相同的错觉。

修复方案

二选一即可:

方案1:调整断言匹配枚举类型

不需要修改业务代码,直接把断言的预期值替换为对应枚举项:

@Test
public void testState() {
    assertEquals(Setting.OFF, testLamp.getStatus());
}

@Test
public void testSequence() {
    testLamp.setNextStatus();
    assertEquals(Setting.LOW, testLamp.getStatus());
}

方案2:修改getStatus()返回字符串类型

如果业务要求getStatus()必须返回字符串,调整该方法的返回逻辑即可:

public String getStatus() {
    // 也可以使用currentSetting.name(),默认枚举实现下和toString()效果一致
    return currentSetting.toString();
}

内容的提问来源于stack exchange,提问作者danik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:04