Я написал один с нуля уже три раза - дважды для тестирования приложений C ++, которые общались с биржами по протоколу FIX, один раз для приложения с графическим интерфейсом.
Проблема в том, что вам нужно подражать внешнему миру для правильного тестирования системы. Я не имею в виду «вне вашего кода» - вне вашего приложения. Это включает в себя эмуляцию конечных пользователей, внешних объектов, Интернета и т. Д.
Я обычно использую Perl для написания своей инфраструктуры тестирования системы и тестов, в основном потому, что это хорошо с доступом ко всем видам средств ОС, и регулярные выражения являются первоклассными гражданами.
Несколько советов: убедитесь, что ваши журналы легко разбираются, детализированы, но не слишком многословны. Иметь нормальную конфигурацию по умолчанию. Упростите «сброс» приложения - это нужно делать после каждого теста.
Подход, который я обычно использую, заключается в том, чтобы иметь своего рода «адаптер», который превращает связь приложения с внешним миром в стандартный вывод некоторого исполняемого файла. Затем я создаю Perl-фреймворк поверх этого, а затем в тестовых примерах используется фреймворк.