Іноді об’єкти просто потрібно щільно з'єднати. Наприклад, CsvFileкласу, ймовірно, потрібно буде тісно працювати з CsvRecordкласом (або ICsvRecordінтерфейсом).
Однак, з того, що я дізнався в минулому, одним із головних принципів розробки тесту є "Ніколи не тестуй більше одного класу за один раз". Значить, ви повинні використовувати ICsvRecordмакети або заглушки, а не фактичні екземпляри CsvRecord.
Однак, спробувавши такий підхід, я помітив, що знущання над CsvRecordкласом можуть бути трохи волохатими. Що призводить мене до одного з двох висновків:
- Важко писати одиничні тести! Це кодовий запах! Рефактор!
- Знущатися над кожною залежною залежністю просто нерозумно.
Коли я замінив свої глузування фактичними CsvRecordекземплярами, все пішло значно гладше. Оглядаючи думки інших людей, я натрапив на цю публікацію в блозі , яка, здається, підтримує №2 вище. Для об’єктів, які природно щільно з'єднані, ми не повинні так сильно хвилюватися над глузуванням.
Чи я не в дорозі? Чи є якісь недоліки до припущення №2 вище? Чи повинен я насправді замислюватися над рефакторингом свого дизайну?