Я конвертирую старый код C в C ++ и тестирую его при перезаписи с помощью GoogleTest. Часть моего кода использует сокеты для подключения к удаленному хосту с адресом IPV4. У меня много проблем с пониманием того, как я могу использовать GoogleTest и GoogleMock для проверки сокетной части моего кода.
Мой объект принимает IP-адрес хоста и количество секунд ожидания, прежде чем снова попытаться подключиться к хосту. Существует функция с именем "conn ()", которая на самом деле пытается подключиться к хосту. Это функция, которую я хочу проверить. Итак, в моем тесте я хочу сделать что-то вроде:
TEST(CONNECTION_TEST, Connection)
{
MyObject obj("###.###.###.###", 1);
ASSERT_TRUE(obj.conn());
}
Я прочитал здесь, что мне нужно было смоделировать сервер, так как тестирование удаленного хоста на самом деле не рекомендуется. Я новичок в GoogleMock, поэтому читаю официальную документацию и читаю Учебник для начинающих GoogleTest , GoogleMock для чайников , Шпаргалку GoogleMock и Поваренная книга GoogleMock . Я смотрел учебник CodesBay . Я просмотрел несколько сообщений о SO, в том числе Что не так с моими попытками смоделировать простой метод C ++ с помощью googlemock? , Шаблоны для модульного тестирования метода C ++, который вызывает стандартный вызов библиотеки и Как выполнить модульное тестирование разъемов BSD .
Для моего фиктивного сервера я сделал следующее. Я создал класс Socket, который упаковывает socket.h, а затем расширил MockSocket. В моем TEST я настроил фиктивный сокет для приема соединений, например:
TEST(CONNECTION_TEST, Connection)
{
// bind to local host?
MyObject obj("0.0.0.0", 1);
// create the host
MockSocket mock_sock;
MockSocket new_sock;
EXPECT_CALL(mock_sock, create()).Times(1);
EXPECT_CALL(mock_sock, bind(_));
EXPECT_CALL(mock_sock, listen());
EXPECT_CALL(mock_sock, accept(_));
mock_sock.create();
mock_sock.bind(123);
mock_sock.listen();
mock_sock.accept(new_sock);
ASSERT_TRUE(obj.conn());
}
Как вы можете сказать, я не знаю, что я делаю. Результаты моего теста не пройдены, и я думаю, что это потому, что я просто не сделал это правильно. Пожалуйста, кто-нибудь может направить меня в правильном направлении? Является ли макет сервера правильным способом проверки моего объекта?