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