При тестировании цель всегда состоит в том, чтобы сначала ответить на вопрос: что тестируется, то есть охват теста.
Так что, если вы тестируете реализацию FTP-серверавам нужно будет создать FTP-клиент.
Если вы тестируете FTP-клиент, вам придется создать FTP-сервер.
Поэтому вам придется сократить тестрасширяйте, пока не достигнете унитарного уровня.
Это может быть, например, для вашей цели:
- Получение списка текущих файлов, установленных для приложения;
- Получение списка файлов, доступных удаленно;
- Получение обновления файла;
- Проверка правильности файла (контрольная сумма?);
- и т. Д ...
В каждом тестируемом предмете должно быть несколько макетов и заглушек.См. эту статью о разнице между ними.Короче говоря (AFAIK) заглушка - это просто объект эмуляции, который всегда работает.И макет (который должен быть уникальным в каждом тесте) - это элемент, который может изменить результат теста (успешно или неудачно).
Для точного назначения FTP-соединения вы можете, например, (при тестировании клиента).сторона) есть некоторые заглушки, которые возвращают список файлов, и макет, который будет тестировать несколько возможных проблем с сервером FTP (тайм-аут, потеря соединения, неправильный контент).Тогда ваша клиентская сторона отреагирует так, как ожидается.Ваш макет может быть настоящим экземпляром FTP-сервера, но он будет вести себя так, как ожидалось, что вызовет все потенциальные ошибки.Как правило, каждая ошибка должна вызывать исключение, которое должно отслеживаться тестовыми блоками, чтобы пройти / провалить каждый тест.
Писать хороший тестовый код немного сложно.Сначала подход, основанный на тестировании, отнимает немного времени, но в долгосрочной перспективе он всегда лучше.Хорошая книга здесь обязательна, или, по крайней мере, некоторые справочные статьи (как у Мартина Фаулера, как указано выше).В Delphi использование интерфейсов и принципов SOLID может помочь вам в написании такого кода и создании заглушек / макетов для написания ваших тестов.
Из моего эксперимента каждый программист иногда теряется в написании тестов ... хорошее тестированиев некоторых случаях может занимать больше времени, чем написание функций ... вас предупреждают!Каждое испытание должно рассматриваться как особенность, а его стоимость должна оцениваться: стоит ли это того?Разве другой тест здесь не подходит?Мой тест отделен от функции, которую он тестирует?Разве это еще не проверено?Тестирую ли я свой код или стороннюю / библиотечную функцию?
Вне темы, но мои два цента: HTTP / 1.1 в настоящее время может быть более подходящим кандидатом, чем FTP, даже для обновления файлов.Вы можете возобновить HTTP-соединение, параллельно загружать HTTP-контент, и этот протокол более дружественный к прокси, чем FTP.И разместить HTTP-контент гораздо проще, чем FTP (некоторые FTP-серверы также имеют проблемы с безопасностью).В настоящее время большинство обновлений программного обеспечения выполняется через HTTP / 1.1, а не по FTP (например, продукты Microsoft или большинство репозиториев Linux).
РЕДАКТИРОВАТЬ:
Вы можете утверждать, что выделать интеграционные тесты, когда вы используете удаленный протокол.Это может иметь смысл, но ИМХО это не то же самое.
Насколько я понимаю, интеграционные тесты проводятся, когда все ваши компоненты работают вместе, как с реальным приложением, а затем проверяют, что они работают должным образом.Мое предложение о тестировании FTP заключается в том, что вы издеваетесь над сервером FTP, чтобы явно протестировать все потенциальные проблемы (тайм-аут, ошибка соединения или передачи ...).Это нечто иное, чем интеграционные тесты: охват кода намного больше.И вы тестируете только одну часть кода, а не всю интеграцию кода.Это не потому, что вы используете какое-то удаленное соединение, которое вы проводите интеграционные тесты: это все еще унитарное тестирование.
И, конечно, интеграционные и системные тесты должны проводиться после унитарных тестов.Но унитарные тесты клиента FTP могут имитировать сервер FTP, запускать его локально, но тестировать все потенциальные проблемы, которые могут возникнуть в реальной большой всемирной паутине.