LINUX.ORG.RU

JUnit + h2m + hibernate или третий лишний

 , ,


0

1

Доброго времени. Сразу к делу, пожалуй, зачем тянуть. Прикрутил тест, запустил, жду зеленый статус, а нет его. Ниже детали.

@Entity
@Table(name = "sessions")
public class Session {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @Column(name = "id", unique = true)
    private String id;

    @Column(name = "movie")
    private String movie;

    @Column(name = "time")
    private Date time;

    @OneToMany(mappedBy = "session", fetch = FetchType.LAZY)
    private List<Reservation> reservations;
    
    ...

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Session session = (Session) o;

        if (id != null ? !id.equals(session.id) : session.id != null) return false;
        if (movie != null ? !movie.equals(session.movie) : session.movie != null) return false;
        if (time != null ? !time.equals(session.time) : session.time != null) return false;
        return !(reservations != null ? !reservations.equals(session.reservations) : session.reservations != null);
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (movie != null ? movie.hashCode() : 0);
        result = 31 * result + (time != null ? time.hashCode() : 0);
        result = 31 * result + (reservations != null ? reservations.hashCode() : 0);
        return result;
    }
}

Где-то по соседству:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ticket-app.xml")
@ActiveProfiles("test") 
public class SessionTest {

    private static List<Session> expectedSessions;

    @BeforeClass
    public void setUp() throws ParseException {
        expectedSessions = Arrays.asList(
                new Session("69c48d7f-77e4-46de-b72f-93310c2fdcca", "Movie #1", new Timestamp(new SimpleDateFormat("dd-MM-yyyy").parse("10-06-2015").getTime()))
        );
    }

    @Test
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void thatTicketsSelectionWorks() {
        List<Session> sessions = ticketService.listSessions(new Date());
        assertTrue(CollectionUtils.containsAny(sessions, expectedSessions));
    }

    ...
}

new Timestamp(new SimpleDateFormat(«dd-MM-yyyy»).parse(«10-06-2015»).getTime()), Карл! (т.к. хибернейт намекает на Timestamp, а ручками менять сгенерированные идеей equals - последнее дело). Потому что ручками, тащемта.

Суть проблемы: в containsAny коллекции пустые, хотя на строке, в которой я их получаю из h2m - коллекции наполнены, как и ожидается. Вопрос - кто здесь неправ?

Да, дорогой читатель, containsAny будет заменен на проверку полного вхождения. Нужно только понять, почему коллекции недоступны внутри метода CollectionUtils.

bytecode ★★ ()
Последнее исправление: bytecode (всего исправлений: 2)

Сравнивать sql timestamp - последнее дело. Лично я всегда их переделываю в new Date(d.getTime()). (И знаю, что однажды меня проклянут, когда будут переносить ПО в мульти таймзоновую среду)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.