Я работаю со следующей системой:
Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern
Недавно у нас возникла проблема, когда я обновил версию библиотеки, которую использовал, что, помимо прочего, приводило к тому, что метки времени (которые возвращает сторонняя библиотека как long
) изменялись с миллисекунд после эпохи на наносекунды после эпохи.
Проблема:
Если я напишу тесты, которые макетируют объекты сторонней библиотеки, мой тест будет ошибочным, если я допустил ошибку в отношении объектов сторонней библиотеки. Например, я не осознавал, что временные метки изменили точность, что привело к необходимости изменения в модульном тесте, потому что мой макет вернул неверные данные. Это не ошибка в библиотеке , это произошло потому, что я что-то упустил в документации.
Проблема в том, что я не могу быть уверен в данных, содержащихся в этих структурах данных, потому что я не могу генерировать реальные без реального потока данных. Эти объекты большие и сложные и содержат много разных частей данных. Документация для сторонней библиотеки плохая.
Вопрос:
Как я могу настроить свои тесты, чтобы проверить это поведение? Я не уверен, что смогу решить эту проблему в модульном тесте, потому что сам тест легко может быть ошибочным. Кроме того, интегрированная система является большой и сложной, и ее легко пропустить. Например, в описанной выше ситуации я правильно настроил обработку меток времени в нескольких местах, но пропустил одно из них. Похоже, что в моем интеграционном тесте система работала в основном правильно, но когда я развернул ее в рабочей среде (в которой содержится гораздо больше данных), проблема стала очевидной.
У меня нет процесса для моих интеграционных тестов прямо сейчас. Тестирование по сути: старайтесь поддерживать модульные тесты хорошими, добавляйте больше тестов, когда что-то сломается, затем разверните на моем тестовом сервере и убедитесь, что все кажется нормальным, а затем разверните на производстве. Эта проблема с отметкой времени прошла модульные тесты, потому что макеты были созданы неправильно, затем она прошла интеграционный тест, потому что не вызывала каких-либо непосредственных, очевидных проблем. У меня нет отдела QA.
Timestamp
класс (содержащий любое представление , что они хотят) и обеспечивает названные методы ( .seconds()
, .milliseconds()
, .microseconds()
, .nanoseconds()
) и, конечно же, названные конструкторы. Тогда бы не было проблем.