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