【问题标题】:Error java.lang.AssertionError: expected: null<null> but was: java.lang.String<null> what does it mean?错误 java.lang.AssertionError: expected: null<null> but was: java.lang.String<null> 这是什么意思?
【发布时间】:2016-03-17 09:00:57
【问题描述】:

我的 Junit 4.12 测试代码中有这个奇怪的问题。该应用程序使用 Spring Framework 4.1.6 和 Hibernate 4。比较来自不同数据库的两个 bean 时出现此错误

java.lang.AssertionError: expected: null<null> but was: java.lang.String<null>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:834)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at my.test.TestClass.method(TestClass.java:105)

这是什么意思?如何解决?

我的测试类使用SpringJUnit4ClassRunner 运行,看起来与此类似

@ContextConfiguration(
    {
        "classpath:beans-test.xml"
    }
)
@RunWith(SpringJUnit4ClassRunner.class)
public class TestMdtTechnicalGridGeneration extends AbstractJUnit4SpringContextTests {

    @Test
    public void method() {
            assertEquals(bean1.getThing(), bean2.getThing());
    }
}

edit:我指的bean是一个简单的POJO,你可以想象它是这样的:

public class Thing {
    private String thing;

    public void setThing(String thing) {
        this.thing = thing;
    }

    public String getThing() {
        return thing;
    }
}

我让他们使用 Hibernate 沿线

SessionFactory mySF = (SessionFactory) applicationContext.getBean("mySessionFactory");
Query query = mySF.openSession().createQuery("FROM Thing WHERE code = '" + code + "'");
List<Thing> listThing = return query.list();
bean1 = listThing.get(0);

解决接近投票: 我不确定所有这些细节是否有帮助,问题是关于我得到的奇怪 AssertError 而不是我如何得到豆子。我在 SO 和 Google 中都找不到帮助。

edit2:进一步说明,POJO 本身是完全相同的 Java 类,我使用了两个休眠映射文件。唯一的区别是映射中的catalog="this"catalog="that"。我使用两个不同的 sessionfactories,因为数据存储在不同的模式(也称为目录)中,相同的 MySQL 实例。

【问题讨论】:

  • 什么是bean.getThing()返回,这个类型的toString()是什么样的?
  • “这是什么意思?”这意味着bean1.getThing() 不等于bean2.getThing()
  • 你能发布你的 bean 类吗..

标签: java spring hibernate junit


【解决方案1】:

经过更多的挖掘,我发现豆子并不相同。常规 DAO 在 Thing 上设置 值为 null 的字符串,而测试数据 DAO 在 Thing 上设置 null。失败的断言是

@Test
public void testNull() {
    assertEquals(null, "null");
}

我很高兴它失败了,价值观不同的。不过,详细信息非常神秘。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,并通过使用 String.valueOf(Your Value Here) 包装值来解决它,例如String.valueOf("null")

    【讨论】:

    • 这个帮助了我..!
    【解决方案3】:

    这看起来像是 4.12 版本的 JUnit 的问题。 An issue was opened with JUnit on github 现已修复。因此解决方法是降级到 4.11 或采用 JUnit 的最新版本。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 是github官方issue的链接。他们给出了两个解决方案,1 - 回到 Junit 4.11。 2 - 更新到似乎已修复的最新 JUnit 版本。
    • 感谢@Andrew Spencer 的更正。现在答案更好了。
    • @Iker 切换到 JUnit 4.11 后,问题仍然存在。我正在更新问题。
    【解决方案4】:

    请尝试以下测试方法

    @Test
    public void testNull() {
    assertEquals(null, "");
    }
    

    【讨论】:

      【解决方案5】:

      我发现 correct answer 令人困惑,并让我认为 GreenDAO 存储 String yourString = null 和“null”的方式之间存在一些复杂的差异,这让我认为我需要将 JUnit 升级到版本 5,但幸运的是我找出答案的真正含义,即:

      此错误仅表示您正在比较 null 和字符串 "null",它们不相等。就我而言,当我打算存储 null 时,我将 "null" 存储在 GreenDAO 中。

      【讨论】:

        猜你喜欢
        • 2013-05-09
        • 2017-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多