There are a couple of ways to do this in C++:
1. Use the friend keyword for the test classes or methods:
class ToTest
{
public:
    void foo();
    int bar();
private:
    void private_foobar();
    int m_private_value;
    friend void testToTest();
};
void testToTest(){
    ToTest testObj;
//  test testObj.m_private_value
}
This method is usable but it means modifying production code in order to add tests.2. Use preprocessor defines to change the access level
class ToTest
{
public:
    void foo();
    int bar();
#ifdef UNIT_TESTS
public:
#else
private:
#endif
    void private_foobar();
    int m_private_value;
};
This method is still intrusive and adds modifications to production code. Also, you need separate builds for testing and deployment.3. Define private as public for the tested class
#define private public #include <class_to_test.h> #define private privateThis method is non-intrusive, easiest and it allows to test everything in one single build. It will yield some compiler warnings, but they can be ignored, for the sake o testing.
 
No comments:
Post a Comment