Якщо ви маєте справу з великою кількістю застарілого коду, який наразі не перевіряється, то правильний хід - отримати тестове покриття замість того, щоб чекати гіпотетичного великого переписування в майбутньому. Починаючи з написання одиничних тестів - ні.
Без автоматизованого тестування після внесення будь-яких змін у код потрібно виконати тестування програми вручну, щоб переконатися, що воно працює. Почніть із написання тестів на інтеграцію високого рівня, щоб замінити це. Якщо ваш додаток читає файли, перевіряє їх, обробляє дані певним чином і відображає потрібні результати тестів, які фіксують все це.
В ідеалі ви або матимете дані з ручного плану тестування, або зможете отримати зразок фактичних даних про виробництво. Якщо ні, оскільки додаток у виробництві, в більшості випадків він робить те, що має бути, тому просто складіть дані, які вдарять до всіх найвищих балів і припускають, що вихід зараз правильний. Це не гірше, ніж виконувати невелику функцію, припускаючи, що вона робить те, що називається, або будь-які коментарі дозволяють зробити це, і писати тести, припускаючи, що це працює правильно.
IntegrationTestCase1()
{
var input = ReadDataFile("path\to\test\data\case1in.ext");
bool validInput = ValidateData(input);
Assert.IsTrue(validInput);
var processedData = ProcessData(input);
Assert.AreEqual(0, processedData.Errors.Count);
bool writeError = WriteFile(processedData, "temp\file.ext");
Assert.IsFalse(writeError);
bool filesAreEqual = CompareFiles("temp\file.ext", "path\to\test\data\case1out.ext");
Assert.IsTrue(filesAreEqual);
}
Після того, як вам вистачить цих тестів високого рівня, записаних для нормального функціонування додатків та найпоширеніших випадків помилок, кількість часу, яке вам потрібно буде витратити на клавіатуру, щоб спробувати виявити помилки з коду, роблячи щось інше, ніж те, що ви думали, що це повинно зробити, це значно знизиться, що значно спростить майбутнє рефакторинг (або навіть великий перезапис).
Оскільки ви зможете розширити покриття тестових одиниць, ви можете зменшити чи навіть звільнити більшість інтеграційних тестів. Якщо ваш додаток читає / записує файли чи отримує доступ до БД, тестування цих частин ізольовано та знущання над ними чи розпочате тести, створюючи структури даних, прочитані з файлу / бази даних - очевидне місце для початку. Насправді створення інфраструктури тестування займе набагато більше часу, ніж написання набору швидких і брудних тестів; і кожного разу, коли ви запускаєте двохвилинний набір тестів на інтеграцію, а не витрачаючи 30 хвилин вручну на тестування частини того, що охоплювали тести інтеграції, ви вже отримуєте великий виграш.