web-dev-qa-db-ja.com

エラーJava.lang.AssertionError:予期された:null <null>が、だった:Java.lang.String <null>それはどういう意味ですか?

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つの異なるセッションファクトリを使用します。

6

さらに掘り下げた後、私は豆がそうではない同一であることを発見しました。通常のDAOはThingに値がnullの文字列を設定し、テストデータDAOはThingにnullを設定します。失敗したアサートは

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

私はそれが失敗することを嬉しく思います、値are異なる。ただし、詳細メッセージは非常にわかりにくいものです。

5

同様の問題があり、値をString.valueOf(Your Value Here)でラップすることで解決しました。例: String.valueOf( "null")

3
Josh

これは、JUnitの4.12バージョンの問題のようです。 githubのJUnitで問題が発生しました 修正されました。したがって、回避策は4.11にダウングレードするか、JUnitの最新ビルドを使用することです。

以下のTestMethodをお試しください

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

正解 が混乱していることに気づき、GreenDAOがString yourString = nullと `null"を格納する方法の複雑な違いだと思い、JUnitをバージョンにアップグレードする必要があると思いました。 5、しかし幸運にも私は答えの本当の意味を見つけました:それは:

このエラーは、nullと文字列"null"を比較していることを意味します。これらは等しくありません。私の場合、nullを保存するつもりだったときに、GreenDAOに"null"を保存していました。

0
Rock Lee