Firstly, I have written a tiny wrapper class to Google Test, just to make the code less messy, in Tester.h:
class Tester { public: Tester(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); } // 1 int run() { return RUN_ALL_TESTS(); } // 2 };1. Before running any test, we should initialize the environment. What a better place than a constructor to do that?
2. I am happy with a very basic usage of Google Test, I would simply run all the tests.
Then I have written a simple main function, that creates an object Tester, and run it:
Tester(argc, argv).run();I don't even use the return value from run(), I rely on the output generated by Google Test to let the user understand how the testing behaved.
Finally, I put in a source file all the tests I want to be performed. Here are some of them:
TEST(TestConnectShared, BadPort) // 1 { TTR::SharedRedis redis(1234); // 2 ASSERT_FALSE(redis.isConnected()); // 3 } TEST(TestConnectShared, Vanilla) // 4 { TTR::SharedRedis redis; ASSERT_TRUE(redis.isConnected()); } TEST(TestCopyShared, Copy) // 5 { TTR::SharedRedis redis; ASSERT_TRUE(redis.isConnected()); TTR::SharedRedis r2 = redis; ASSERT_TRUE(r2.isConnected()); }1. The TEST() macro requires a test case name (here is TestConnectShared) and a test function name (BadPort). These names should make clear what we are testing here. In this case, I want to check the shared Redis connection behavior when I pass a wrong port number. Notice that the prerequisite is that the Redis server is up and running on localhost, default port.
2. I have put SharedRedis in a namespace named TTR (short for ThisThread Redis), that's way I use that prefix here.
3. I expect isConnected() to return false, so I assert it. If, unexpectedly, I get a valid connection to Redis, this test would fail.
4. The vanilla test on a shared Redis connection would try to create a default connection to Redis. If isConnected() does not return true, I should assume the test has failed.
5. A simple test to check if I can actually copy a shared Redis connection, and if the copy is still connected to Redis.
If you run those tests when a Redis server is not running on your localhost (and accepting connections on its default port), you should expect a number of failures. Actually, it would (wrongly) succeed only the tests expecting a failure, as the shown TestConnectShared-BadPort. Otherwise I would expect an all green lights scenario.
No comments:
Post a Comment