Я пишу класс C ++ для обертывания сокетов (я знаю, что для этого есть хорошие библиотеки - для практики я использую свои собственные):
class Socket {
public:
int init(void); // calls socket(2)
// other stuff we don't care about for the sake of this code sample
};
Этот класс, в свою очередь, используется несколькими другими, и я знаю, что могу выполнить модульное тестирование с помощью googlemock путем создания подклассов и насмешек.
Но я хотел бы сначала разработать этот класс test ], и сейчас я немного застрял. Я не могу использовать googlemock в стандартной библиотеке C (например, socket.h
, в данном случае), поскольку это не класс C ++. Я мог бы создать тонкий класс-оболочку C ++ вокруг функций стандартной библиотеки C, которые мне нужны, например
class LibcWrapper {
public:
static int socket(int domain, int type, int protocol);
static int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
static int listen(int sockfd, int backlog);
static int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
static ssize_t write(int fd, const void *buf, size_t count);
static int close(int fd);
};
Теперь я могу имитировать это и модульно протестировать свой класс Socket
(который теперь может нуждаться в переименовать в Сеть
или что-то подобное). LibcWrapper
может пригодиться и для других классов, и сама по себе не требует модульного тестирования, поскольку предоставляет только набор методов класса.
Мне это начинает казаться хорошо. Я ответил на свой вопрос или существуют ли стандартные шаблоны для тестирования такого рода разработки на C ++?