бы задать вопрос.
Пишете ли вы юнит-тесты для кода на Asio и как?
К примеру, если у меня есть класс tcp соединения, который принимает сокет и делает на нем async_read до дисконнекта и зовет какой-то колбек. Есть метод send, который отдаст данные в async_write.
Есть ли какой-то адекватный подход для юнит-тестирования асинхронного кода?
Тесты в самом asio устроены так, что контексту напихивается работа, потом делается run. И по окончанию run'а проверяется результат.
Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается
можно модульными тестами(моки написать, и ожидание вызова с разными параметрами ) обложить, ИМХО, а условные колбеки юнит тестами
io.stop() никто не отменял
Хм, пожалуй действительно можно что-то придумать со stop, спасибо за наводку
юнит-тесты работают только на "чистых" функциях. Сокеты — это уже не про юнит-тесты.
Тогда какой подход к автоматическому тестированию здесь должен быть?
Это серая зона. С юнит-тестами все понятно. С интеграционними тестами все понятно. Что между ними — непонятно. Есть какие-то частные решения, вроде тестов на с нуля создаваемой БД.
моки, gtest expect_call или аналоги и... понеслась, дальше сами колбеки юнит тестами покрываешь
> Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается В реальном коде же как то должно останавливаться.
Конечно, при завершении программы или при отключении удаленной стороны
Обсуждают сегодня