It is a very bad idea to falsify / fake part of a class to test another.
By doing this, you do not check what the real code does under test conditions, which leads to unreliable test results.
It also increases the load on the content of the fake part of the class. If this applies to the entire test program, the fake implementation also makes other tests on the fake method more complex.
You need to ask yourself why you need to fake the tested part.
If this is because the method is accessing a file or database, then you must define an interface and pass an instance of that interface to the constructor or class method. This allows you to test different scenarios in the same test application.
If this is because you use singles, you need to rethink your design to make it more verifiable: removing singlets will remove implicit dependencies and nightmares for maintenance.
If you use static methods / stand-alone functions to access data in the registry or settings file, you should really transfer this from the function being tested and pass the data as a parameter or provide the interface of the settings provider. This will make the code more flexible and reliable.
If it should break the dependency for testing purposes (for example, faking a vector method to test a method in a matrix class), then you should not fake it - you should consider the test code as defined by the test class with its open interface: methods; preconditions, post-conditions, invariants, documentation, parameters and exception specifications.
You can use implementation details to check for special cases of edges, but run them through the main API, rather than falsifying implementation details.
For example, suppose you are fake std :: vector :: at (), but the implementation has switched to using the [] operator. Your test will be interrupted or silently pass.