Junit4.12テストコードにこの奇妙な問題があります。アプリケーションはSpringFramework4.1.6とHibernate4を使用します。異なるデータベースからの2つの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クラス、2つの休止状態のマッピングファイルを使用します。唯一の違いは、マッピングのcatalog="this"
とcatalog="that"
です。データは異なるスキーマ(別名カタログ)、同じMySQLインスタンスに格納されるため、2つの異なるセッションファクトリを使用します。
さらに掘り下げた後、私は豆がそうではない同一であることを発見しました。通常のDAOはThingに値がnullの文字列を設定し、テストデータDAOはThingにnullを設定します。失敗したアサートは
@Test
public void testNull() {
assertEquals(null, "null");
}
私はそれが失敗することを嬉しく思います、値are異なる。ただし、詳細メッセージは非常にわかりにくいものです。
同様の問題があり、値をString.valueOf(Your Value Here)でラップすることで解決しました。例: String.valueOf( "null")
これは、JUnitの4.12バージョンの問題のようです。 githubのJUnitで問題が発生しました 修正されました。したがって、回避策は4.11にダウングレードするか、JUnitの最新ビルドを使用することです。
以下のTestMethodをお試しください
@Test
public void testNull() {
assertEquals(null, "");
}
正解 が混乱していることに気づき、GreenDAOがString yourString = null
と `null"を格納する方法の複雑な違いだと思い、JUnitをバージョンにアップグレードする必要があると思いました。 5、しかし幸運にも私は答えの本当の意味を見つけました:それは:
このエラーは、null
と文字列"null"
を比較していることを意味します。これらは等しくありません。私の場合、null
を保存するつもりだったときに、GreenDAOに"null"
を保存していました。