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 : /proc/thread-self/root/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
Choose File :

Url:
Dir : //proc/thread-self/root/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)
        { }
};
```