Тест аксона не проходит, когда тип агрегированного поля установлен -> HashSet - PullRequest
2 голосов
/ 12 февраля 2020

Я упал в странный (по крайней мере для меня) сбой при использовании Set вместо List для хранения коллекции объектов.

Мне удалось воспроизвести проблему в этом publi c repo , так что я надеюсь, что будет полезно привести реальный случай, чтобы помочь лучше понять.

По какой-то причине таблица ha sh моего hashset отличается между жизненным циклом теста, я имею в виду событие за событием, которое применяется, когда приходит команда, моя коллекция Schedules отличается, хотя значения одинаковы.

Результат теста:

org.axonframework.test.AxonAssertionError: Illegal state change detected! Property "com.acme.axonsample.axonsample.WorkDay" has different value when sourcing events.
Working aggregate value:     <WorkDay(id=workDay-for-2020-01-02, day=2020-01-02, schedules=[Schedule(id=5dca3df439881c002543876e, workDuration=PT41M, begin=2020-01-02T10:00Z, end=2020-01-02T11:00Z, workLogs=Optional[[WorkLog(start=2020-01-02T09:45Z, stop=2020-01-02T10:35Z), WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z)]]), Schedule(id=7dca3bf439881c002543836b, workDuration=PT1H, begin=2020-01-02T12:00Z, end=2020-01-02T13:00Z, workLogs=Optional[[WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z)]]), Schedule(id=2dca3be439871c022543836a, workDuration=PT45M, begin=2020-01-02T14:00Z, end=2020-01-02T14:45Z, workLogs=Optional[[WorkLog(start=2020-01-02T13:58Z, stop=2020-01-02T14:45Z)]])], workLogs=[WorkLog(start=2020-01-02T09:45Z, stop=2020-01-02T10:35Z), WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z), WorkLog(start=2020-01-02T13:58Z, stop=2020-01-02T14:45Z)])>
Value after applying events: <WorkDay(id=workDay-for-2020-01-02, day=2020-01-02, schedules=[Schedule(id=7dca3bf439881c002543836b, workDuration=PT1H, begin=2020-01-02T12:00Z, end=2020-01-02T13:00Z, workLogs=Optional[[WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z)]]), Schedule(id=2dca3be439871c022543836a, workDuration=PT45M, begin=2020-01-02T14:00Z, end=2020-01-02T14:45Z, workLogs=Optional[[WorkLog(start=2020-01-02T13:58Z, stop=2020-01-02T14:45Z)]]), Schedule(id=5dca3df439881c002543876e, workDuration=PT41M, begin=2020-01-02T10:00Z, end=2020-01-02T11:00Z, workLogs=Optional[[WorkLog(start=2020-01-02T09:45Z, stop=2020-01-02T10:35Z), WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z)]])], workLogs=[WorkLog(start=2020-01-02T09:45Z, stop=2020-01-02T10:35Z), WorkLog(start=2020-01-02T10:54Z, stop=2020-01-02T13:00Z), WorkLog(start=2020-01-02T13:58Z, stop=2020-01-02T14:45Z)])>

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

1 Ответ

0 голосов
/ 29 апреля 2020

По словам создателя Axon, основная проблема связана с hashCode, который в моих случаях генерируется с использованием Lombok.

Для решения этой проблемы приведенный ниже код будет работать, как и ожидалось:

 @Override
 public int hashCode() {
   return Objects.hash(id);
 }

Весь поток можно прочитать здесь

PS :. Поскольку я хотел бы продолжать использовать Lombok, и я протестировал с другими генераторами equals и hashCode, сталкивающимися с той же проблемой, я сохранил свою реализацию с List вместо Set

...