我在Junit4.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,而不是我如何得到bean。我在SO和Google中都找不到帮助。
edit2:为了进一步澄清,POJO本身是完全相同的Java类,我使用了两个hibMap文件。唯一的区别是Map中的catalog="this"
和catalog="that"
。我使用了两个不同的会话工厂,因为数据存储在不同的模式(又名目录)中,相同的MySQL示例。
7条答案
按热度按时间kpbwa7wx1#
经过进一步的挖掘,我发现bean * 并不 * 相同。常规DAO在Thing上将 string设置为null,而测试数据DAO在Thing上设置为 null。
我很高兴它失败了,值是不同的。虽然详细信息是相当神秘的。
1hdlvixo2#
我也遇到过类似的问题,解决方法是用String.valueOf(Your Value Here) Package 值,例如String.valueOf(“null”)
wi3ka0sx3#
这看起来像是4.12版本的JUnit.An issue was opened with JUnit on github的问题,现在已经修复了。因此,解决方法是降级到4.11或采用最新的JUnit构建版本。
7dl7o3gd4#
请尝试以下测试方法
pcrecxhr5#
我发现correct answer令人困惑,并使我认为这是GreenDAO存储
String yourString = null
和'null'的方式之间的一些复杂差异,使我认为我需要将JUnit升级到版本5,但幸运的是,我发现了答案的真正含义,即:这个错误仅仅意味着您正在比较
null
和字符串"null"
,它们不相等。在我的例子中,当我打算存储null
时,我在GreenDAO中存储了"null"
。relj7zay6#
我收到错误,因为我正在使用:
删除equalTo并直接比较它们都解决了错误:
lsmd5eda7#