为什么assertThat()。isEqualTo会产生与Hibernate相等的不同结果?

时间:2012-11-11 15:12:45

标签: java hibernate testing

我在测试中使用了festAssertions,我注意到在测试hibernate对象的测试中使用assertThat(object).isEqualTo(otherObject)会产生与assertThat(object.equals(otherObject)).isTrue();不同的结果。

我必须做一些解决方法,现在测试看起来真的很丑,但我不能使用 assertThat(collection).contains(object1, object2)因为这不起作用!

这是部分代码(请看最后一行): seasonRate,seasonRate1被创建并持久化。然后从db检索并检查原件。没有什么花哨的,但不适用于festAssertions。

你知道如何解决这个问题吗?如果这是我的错误吗?

    (...)
    session.save(seasonRate);
    session.save(seasonRate2);

    session.getTransaction().commit();
    session.close();


    session = sessionFactory.getCurrentSession();
    session.beginTransaction();
    RateRepositoryHibernate rateRepositoryHibernate= new RateRepositoryHibernate(new StubHibernateSessionFactory(sessionFactory));
    // when
    final Collection<Rate> allRatesForRoom = rateRepositoryHibernate.getAllRatesForRoom(room);

    // then
    assertThat(allRatesForRoom.size()).isEqualTo(EXPECTED_RATES);
    for(Rate rate : allRatesForRoom)
    {
        if(rate.getRateName().equals("season name 2"))
        {
            assertThat(rate.equals(seasonRate2)).isTrue();
        }
        if(rate.getRateName().equals("season name"))
        {
            assertThat(rate.equals(seasonRate)).isTrue();
        }
    }
    //assertThat(allRatesForRoom).contains(seasonRate, seasonRate2); // this does not work somehow

1 个答案:

答案 0 :(得分:1)

事实证明,这不是festAssertions问题,因为在更改代码后我无法重现该错误并且.contains方法效果很好。

我的更改与当前会话概念有关,我可能有一些不好的代码。

如果您碰巧遇到类似问题,那么您应该在hibernate相关代码和配置中查找问题,但不要在festAssertions中查找问题。