Моя інтерпретація цієї розмови:
- тестові компоненти, а не класи.
- перевірити компоненти через їх порти інтерфейсу.
Це не зазначено в розмові, але я думаю, що припущений контекст поради є чимось на кшталт:
- ви розробляєте систему для користувачів, а не, скажімо, бібліотеку корисних програм або рамки.
- мета тестування - успішно поставити якомога більше в рамках конкурентного бюджету.
- компоненти написані єдиною, зрілою, ймовірно, статично набраною мовою, як C # / Java.
- компонент порядку 10000-50000 рядків; проект Maven або VS, плагін OSGI тощо.
- компоненти написані одним розробником або тісно інтегрованою командою.
- ви дотримуєтесь термінології та підходу чогось подібного до шестикутної архітектури
- Порт компонента - це місце, де ви залишаєте локальну мову та її тип системи позаду, переходячи на http / SQL / XML / байти / ...
- для обгортання кожного порту вводяться інтерфейси, у сенсі Java / C #, які можуть мати реалізації, вимкнені для комутації технологій.
Тож тестування компонента є найбільшою можливою сферою, в якій щось ще можна розумно назвати одиничним тестуванням. Це досить відрізняється від того, як деякі люди, особливо науковці, використовують цей термін. Це не що інше, як приклади в типовому посібнику з інструментального тестування. Однак він відповідає своєму походженню в тестуванні апаратних засобів; плати та модулі перевірені блоком, а не дроти та гвинти. Або принаймні ви не будуєте знущання Боїнга, щоб випробувати гвинт ...
Екстраполюючи від цього і вкладаючи в себе свої думки,
- Кожен інтерфейс буде або входом, і вихідним, або співпрацюючим (як база даних).
- ви перевіряєте вхідні інтерфейси; викликати методи, стверджувати зворотні значення.
- ви знущаєтесь із вихідних інтерфейсів; Переконатися, що очікувані методи викликаються для даного тестового випадку.
- ви підробляєте співробітників; забезпечити просту, але працюючу реалізацію
Якщо ви робите це правильно і чисто, вам ледь не потрібен глузуючий інструмент; вона звикає лише кілька разів за систему.
База даних, як правило, є співробітником, тому вона отримує фейки, а не глузує. Це було б болісно здійснити вручну; на щастя, такі речі вже є .
Основна схема тестування - це виконати деяку послідовність операцій (наприклад, збереження та перезавантаження документа); підтвердити це працює. Це те саме, що і для будь-якого іншого тестового сценарію; жодна (робоча) зміна впровадження, ймовірно, не призведе до збою такого тесту.
Виняток становлять записи, які записуються в базу даних, але ніколи не читаються тестованою системою; наприклад, журнали аудиту або подібні. Це виходи, і тому слід глузувати. Тестова схема - це виконати деяку послідовність операцій; підтвердження аудиту викликався інтерфейс з методами та аргументами, як зазначено.
Зауважте, що навіть тут, якщо ви використовуєте безпечний для зловмисників інструмент типу mockito , перейменування методу інтерфейсу не може спричинити збій тесту. Якщо ви використовуєте IDE з завантаженими тестами, він буде відновлений разом із методом перейменування. Якщо ви цього не зробите, тест не складеться.