错误 java.lang.AssertionError: expected: null<null> but was: java.lang.String<null> 这是什么意思?

新手上路,请多包涵

我的 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());
    }
}

编辑:我所指的 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 实例。

原文由 Alessandro Da Rugna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

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

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

我很高兴它失败了,价值观 不同 了。虽然详细消息非常神秘。

原文由 Alessandro Da Rugna 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有一个类似的问题,并通过用 String.valueOf(Your Value Here) 例如 String.valueOf(“null”) 包装值来解决它

原文由 Josh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题