NullPointerException в чужой библиотеке, или некоторые манипуляции с байткодом

Привет, хабр!

Был тёплый пятничный вечер, хотелось скорее бежать домой, пересесть из компьютерного кресла на кресло настоящее в полутора метрах, а тесты всё никак не проходили. Причём не проходили они самым изощрённым образом: падая прямо где-то в недрах библиотеки.
Самое обидное было то, что состояние временной базы, поднятой в докере на время работы этих псевдоинтергационных тестов, было корректное, и фичу можно было отдавать на ревью – dbunit почему-то считал, что у постгреса в колонке с типом uuid не может быть null-значения, и падал при валидации.

Вот как-то так:

java.lang.NullPointerException: null
at org.dbunit.ext.postgresql.UuidType.typeCast (UuidType.java:67)
at org.dbunit.dataset.datatype.AbstractDataType.compare (AbstractDataType.java:83)
at org.dbunit.assertion.comparer.value.IsActualEqualToExpectedValueComparer.isExpected (IsActualEqualToExpectedValueComparer.java:22)
...
at java.util.concurrent.FutureTask.run (FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
at java.lang.Thread.run (Thread.java:834)

Что использованная в проекте версия 2.6.0, что самая новая 2.7.0 – увы.

Вечер был тёплый, ноутбук грелся, но вентилятор не включал во имя тишины и троттлился до желанных в многие годы назад 600 МГц, и были варианты действий:

0. Зарепортить баг в dbunit и ждать новой его версии, если pull-request вообще примут.
1. Закостылить тесты, чтобы они не проверяли те uuid-колонки, которые null, хотя именно это они и должны были проверять.
2. Вообще убрать тесты. Кстати, кто-нибудь пишет тесты на тесты?..
3. Закончить рабочий день и нырнуть с головой в исследования.
Сделать вид, будто сегодня пятница

from Java – Объектно-ориентированный язык программирования https://ift.tt/3sDTh0d

Leave a Reply

Back to Top