Lets say I have
class Foo {
public:
VIRTUAL_FOR_TEST void bar(int i);
};
where it's mocked via
class FooMock : public Foo {
public:
MOCK_METHOD(void, bar, (int), ());
};
Foo should only be virtual for the sake of unit testing as there's no needed inheritence for it in production code. Do you still need to provide the override keyword to MOCK_METHOD?
Edit:
If override is needed, why is it optional to enter? Why isn't override default to MOCK_METHOD?
overrideis never required. It was added in C++11 to help programmers convey intention clearly and to catch silly typos by making compiler throw an error if method marked withoverridedoes not in fact override anything.MOCK_METHODis a macro that expands to a regular function declaration (well, this and another function that is the mock body). Since you aren't required to addoverridespecifier in any case, you aren't required to do so here either. And I had usedMOCK_METHODwithoutoverrideas a workaround for GMock limitation (it couldn't mock a function that returns a move only type back in the day).It is definitely a good idea to add
overridesince it helps to catch a change in code without having to wonder "why does this mock not get called". While I somewhat agree with commenters that you should test code that you execute, I also think one should not modify code just for testing purposes. Advice to "change your design" works in Java where you have to pay the cost ofvirtualfunctions anyway, but not necessarily in C++.