2012-11-11 230 views
0

我在我的测试中使用festAssertions,并且我注意到在测试hibernate对象的测试中,使用assertThat(object).isEqualTo(otherObject)的结果与assertThat(object.equals(otherObject)).isTrue();的结果不同。为什么assertThat()。isEqualTo与Hibernate的等价结果会产生不同的结果?

我不得不做的解决方法,现在测试看起来真的很难看,但我不能使用 assertThat(collection).contains(object1, object2),因为这只是不工作!

这里是部分代码(看最后一行): seasonRate,seasonRate1被创建和保存。然后从数据库中检索并检查原件。没有什么奇特的,但不适用于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

事实证明,这不是festAssertions问题,因为更改代码后,我无法重现的bug和.contains方法很好地工作。

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

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

相关问题