PK
œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Notice: ob_end_clean(): Failed to delete buffer. No buffer to delete in /home/telusvwg/public_html/da754d/index.php on line 8
| Dir : /opt/cpanel/ea-ruby27/src/passenger-release-6.1.2/doc/ |
| Server: Linux premium279.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64 IP: 66.29.132.192 |
| Dir : //opt/cpanel/ea-ruby27/src/passenger-release-6.1.2/doc/CxxMockingStrategy.md |
# 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)
{ }
};
```