How do I unit test a protected method in C++?
In Java, I'd either create the test class in the same package as the class under test or create an anonymous subclass that exposes the method I need in my test class, but neither of those methods are available to me in C++.
I am testing an unmanaged C++ class using NUnit.
Declare a friend class MyClass_UnitTest; in your MyClass. You can then define MyClass_UnitTest elsewhere in your unit test program that has full access to MyClass internals, but you don't have to provide an implementation in your release application. See CppUnit documentation for a good example of how this is done.
I use CxxTest and have the CxxTest derive from the class that contains the protected member function. If you're still searching around for your favorite C++ Unit Testing framework, take a look at this article.
You can also use using keyword to expose public block (using .
See: http://en.cppreference.com/w/cpp/language/using_declaration
Assuming you mean a protected method of a publicly-accessible class:
In the test code, define a derived class of the class under test (either directly, or from one of its derived classes). Add accessors for the protected members, or perform tests within your derived class . "protected" access control really isn't very scary in C++: it requires no co-operation from the base class to "crack into" it. So it's best not to introduce any "test code" into the base class, not even a friend declaration:
Consider a public, possibly static 'unit test' function.
Ugly, but better than the alternatives I can think of using macros or friends or such.
There's a simple solution in C++ using #define. Just wrap the include of your "ClassUnderTest" like this:
Credit goes to this article and RonFox