在我的Junit 4.12测试代码中有一个奇怪的问题。应用程序使用SpringFramework4.1.6和Hibernate 4。
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,而不是我是如何得到豆子的。我在这里找不到帮助,也找不到谷歌。
edit2:为了进一步澄清,POJO本身就是完全相同的Java类,我使用两个hibernate映射文件。唯一的区别是映射中的catalog="this"
和catalog="that"
。我使用两个不同的会话工厂,因为数据存储在不同的模式(也就是目录)中,相同的MySQL实例。
发布于 2015-12-11 14:45:51
经过进一步的挖掘,我发现豆子是不一样的。常规DAO在Thing上设置值为null的字符串,而测试数据DAO在Thing上设置null。失败的断言是
@Test
public void testNull() {
assertEquals(null, "null");
}
我很高兴它失败了,值是不同的。但是,细节信息是非常神秘的。
发布于 2016-06-15 20:33:10
我有一个类似的问题,并通过用String.valueOf(这里的值)包装值来解决这个问题,例如String.valueOf("null")
发布于 2015-12-11 12:36:38
这似乎是JUnit 4.12版本的一个问题。JUnit在github上打开了一个问题现在已经修好了。因此,解决方法是将JUnit降级到4.11或采用最新的版本。
https://stackoverflow.com/questions/34223696
复制相似问题