소켓을 랩핑하기 위해 C++ 클래스를 작성하고 있습니다. (연습용으로 좋은 라이브러리가 있다는 것을 알고 있습니다.)표준 라이브러리 호출을하는 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 first으로 개발하고 싶습니다. 현재 조금 갇혀 있습니다. C++ 클래스이므로 googlemock을 C 표준 라이브러리 (즉, socket.h
)에 사용할 수 없습니다. I 은 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);
};
지금은 그 조롱 수 있으며, 단위는 (지금 Network
이름을 변경하거나 일부 등해야 할 수도 있습니다) 내 Socket
클래스를 테스트합니다. LibcWrapper
은 다른 클래스에도 도움이 될 수 있으며 클래스 테스트 방법을 제공하기 때문에 단위 테스트를 수행하지 않아도됩니다.
이것은 나에게 좋게 들리기 시작했습니다. 내 자신의 질문에 대답 했습니까? 아니면 이런 종류의 개발을 C++로 테스트하는 표준 패턴이 있습니까?
googlemock [요리 책] (http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Free_Functions)은 당신과 비슷한 것을 제안합니다. – beduin
@ 베두인 : 대답 해 주시면 투표 할게요. :) –
@Josh Glover : done)) – beduin