Потеря соединения при тестировании в модульных тестах (в экономном приложении C ++ или вообще) - PullRequest
0 голосов
/ 31 марта 2019

Это не сумасшествие, если предположить, что мой экономный клиент просто потеряет соединение без предупреждения .В этом случае я должен обнаружить это и повторно подключиться к серверу.

У меня есть многопоточная программа C ++ (как клиентская, так и серверная), которая использует thrift с пулом объектов без блокировки и т. Д., И т. Д. Это сложносистема с блокировками и спящими режимами, которая нуждается в хорошем тестировании, и мне нужно имитировать потерю соединения в моих модульных тестах.Мои тесты используют loopback (127.0.0.1) для подключения к комиссионному серверу.Есть ли способ имитировать потерянное соединение, чтобы увидеть, как мое программное обеспечение реагирует и протестировать его?

Я нахожусь на Linux, Ubuntu 18.04.Я не против использовать системные вызовы для обмана моих тестов.

Если вам нужна дополнительная информация, пожалуйста, спросите.Я не уверен, могу ли я предоставить больше информации.

1 Ответ

0 голосов
/ 14 апреля 2019

Поскольку ваш вопрос помечен как юнит-тестирование, я дам несколько замечаний, касающихся юнит-тестирования. Однако то, что вы сейчас делаете, похоже, является интеграционным тестированием.

В модульном тестировании вы сосредотачиваетесь на тестировании своего кода изолированно от зависимых компонентов. То есть вместо того, чтобы тестировать свой код вместе с библиотекой Thrift, вы бы предпочли использовать какой-то макет этой библиотеки. Ваш код не должен быть в состоянии отличить, работает ли он с реальной библиотекой или с фиктивной. Поведение макета контролируется тестовым кодом. Это дает вашему тестовому коду большую степень свободы в использовании различных сценариев, которые вас интересуют. Если вы заинтересованы в том, чтобы узнать о нем больше, найдите «насмешливый», «внедрение зависимостей» и «инверсия управления», и вы найти много информации.

Тем не менее, нет ничего плохого в выполнении интеграционных тестов в сочетании с экономной библиотекой: тщательное тестирование некоторого кода потребует как модульного, так и интеграционного тестирования. Дело лишь в том, что цели и подходы этих двух сторон отличаются.

...