Оскільки я не дуже досвідчений в одиничному тестуванні, я намагаюся зібрати деякі правила, які я вивчу спочатку.
Будьте уважні, вивчаючи "правила" для проблем, з якими ви ніколи не стикалися. Якщо ви натрапите на якесь «правило» чи «найкращу практику», я б запропонував знайти простий іграшковий приклад того, де це правило «належить» використовувати, і спробувати вирішити цю проблему самостійно , ігноруючи те, що говорить «правило».
У цьому випадку ви можете спробувати придумати 2 або 3 прості класи та деякі поведінки, які вони повинні реалізувати. Реалізовуйте заняття будь-яким способом, яким ви вважаєтесь природним, і пишіть одиничний тест на кожну поведінку. Складіть список будь-яких проблем, з якими ви зіткнулися, наприклад, якщо ви почали працювати в один бік, то довелося піти назад і змінити його пізніше; якщо ви заплуталися в тому, як повинні поєднуватися речі; якщо вас дратувало написання котельних табличок; тощо.
Потім спробуйте вирішити ту саму проблему, дотримуючись «правила». Знову складіть список проблем, з якими ви стикалися. Порівняйте списки та подумайте, які ситуації можуть бути кращими при дотриманні правила, а які - ні.
Що стосується Вашого актуального питання, я схиляюся до того, щоб підходити до підходів до портів та адаптерів , де ми робимо різницю між "основною логікою" та "послугами" (це подібно до розмежування чистих функцій та ефективних процедур).
Основна логіка полягає в тому, щоб обчислити речі "всередині" програми на основі проблемної області. Він може містити класи , як User
, Document
, Order
, Invoice
, штраф і т.д. Це мати базові класи називати new
для інших основних класів, так як вони «внутрішньої» деталі реалізації. Наприклад, створення також Order
може створити Invoice
і Document
деталізувати те, що було замовлено. Не потрібно знущатися над ними під час тестів, адже це фактичні речі, які ми хочемо перевірити!
Порти та адаптери - це те, як основна логіка взаємодіє із зовнішнім світом. Це де речі , як Database
, ConfigFile
, EmailSender
і т.д. жити. Це те, що робить тестування важким, тому доцільно створити їх за межами основної логіки та ввести їх у міру необхідності (або з використанням ін'єкції залежності, або у вигляді аргументів методу тощо).
Таким чином, основна логіка (яка є специфічною для додатків частиною, де живе важлива бізнес-логіка, і підлягає найбільшому змісту) може бути перевірена самостійно, не піклуючись про бази даних, файли, електронні листи тощо. Ми можемо просто передати кілька прикладних значень і перевірити, чи отримуємо правильні вихідні значення.
Порти та адаптери можна перевірити окремо, використовуючи макети для бази даних, файлової системи тощо, не піклуючись про бізнес-логіку. Ми можемо просто передати деякі приклади значень та переконатися, що вони зберігаються / читаються / надсилаються / тощо. відповідним чином.