A Hand-Crafted Test Double

To use a test double, you must be able to supplant the behavior of the CurlHttp class. C++ provides many different ways, but the predominant manner is to take advantage of polymorphism. Let’s take a look at the Http interface that the CurlHttp class implements (realizes):

c5/1/Http.h
 
virtual​ ~Http() {}
 
virtual​ ​void​ initialize() = 0;
 
virtual​ std::​string​ get(​const​ std::​string​& url) ​const​ = 0;

Your solution is to override the virtual methods on a derived class, provide special behavior to support testing in the override, and pass the Place Description Service code a base class pointer.

Let’s see some code.

c5/1/PlaceDescriptionServiceTest.cpp
 
TEST_F(APlaceDescriptionService, ReturnsDescriptionForValidLocation) ...

Get Modern C++ Programming with Test-Driven Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.