Automatic generation of mock classes for gmock
-
29-04-2021 - |
문제
I am using gmock for unit testing C++ code. I am not using the gtest framework. I am using visual studio 2008's built-in testing framework.
Now my problem is that I have to manually write mock classes for a real class to unit test. For example if I have A class with 5 functions then I have to write MockAClass with 5 functions. Is there any way that these classes are automatically generated.
class AClass
{
public:
virtual int AFunction()
{
return 5;
}
virtual int AFunctionWithArguments(int x)
{
return x;
}
class MockAClass : public AClass
{
public:
MOCK_METHOD0(AFucntion, int());
MOCK_METHOD1(AFunctionWithArgument, int(int x));
};
해결책
There is a tool bundled with the google mock project that will help you do this. However I think the tool requires python to be installed, and I don't know how well it works in a windows environment. I've also found that the generated files sometimes need a little tweak to work perfectly.
Here's the info from the docs:
Tip: If even this is too much work for you, you'll find the gmock_gen.py tool in Google Mock's scripts/generator/ directory (courtesy of the cppclean project) useful. This command-line tool requires that you have Python 2.4 installed. You give it a C++ file and the name of an abstract class defined in it, and it will print the definition of the mock class for you. Due to the complexity of the C++ language, this script may not always work, but it can be quite handy when it does. For more details, read the user documentation.
Here is new localization of this script.
다른 팁
Disclaimer: I used to work at Typemock
Have you considered using another tool?
Typemock has a tool called Isolator++ that do not need you to write "mocking classes".
TEST_F(IsolatorTests, SomeTest)
{
AClass* fakeclass = FAKE(AClass);
WHEN_CALLED(fakeclass->AFunction()).Return(10);
ASSERT_EQ(10, fakeclass.AFunction());
}
You can learn more about it at this about page