|
Server : LiteSpeed System : Linux premium152.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64 User : idesfsze ( 1473) PHP Version : 7.4.33 Disable Function : NONE Directory : /opt/cpanel/ea-ruby27/src/passenger-release-6.1.0/doc/ |
# C++ mocking strategy
- We don't use any mocking library.
- We implement mocking by splitting mockable code to protected virtual methods. Inside test suites, we create a subclass in which we override the methods we want to mock.
- Best practices for the override:
- Opt-in for mocking on a per-test basis.
- When not opted-in, call the parent class's method instead of duplicating its code.
Example:
```c++
class Greeter {
protected:
virtual const char *name() {
return "john";
}
public:
void greet() {
std::cout << "hello " << name() << std::endl;
}
};
// In the test suite:
class TestGreeter: public Greeter {
protected:
virtual const char *name() override {
if (mockName != nullptr) {
return mockName;
} else {
return Greeter::name();
}
}
public:
const char *mockName; // Set to non-nullptr to mock the name
TestGreeter()
: mockName(nullptr)
{ }
};
```