If i would start on writing a simple Mock framework, then what are the things that a basic mock framework MUST have? Obviously mocking any object, but what about assertions and perhaps other things?
When I think of how I would write my own mock framework then I realise how much I really know (or don't know) and what I would trip up on. So this is more for educational purposes.
Of course I did research and this is what i've come up with that a minimal mocking framework should be able to do. Now my question in this whole thing is, am I missing some important details in my ideas?
Mocking
Mocking a class: Should be able to mock any class. The Mock should preserve the properties and their original values as they were set in the original class. All method implementations are empty.
Calls to methods of Mock: The Mock framework must be able to define what a mocked method must return. IE: $MockObj->CallTo('SomeMethod')->Returns('some value');
Assertions
To my understanding mocking frameworks also have a set of assertions. These are the ones I think are most important (taken from SimpleTest).
expect($method, $args) Arguments must match if called
expectAt($timing, $method, $args) Arguments must match when called on the $timing'th time
expectCallCount($method, $count) The method must be called exactly this many times
expectMaximumCallCount($method, $count) Call this method no more than $count times
expectMinimumCallCount($method, $count) Must be called at least $count times
expectNever($method) Must never be called
expectOnce($method, $args) Must be called once and with the expected arguments if supplied
expectAtLeastOnce($method, $args) Must be called at least once, and always with any expected arguments
And that's basically, as far as I understand, what a mock framework should be able to do. But is this really everything? Because it currently doesn't seem like a big deal to build something like this.
But that's also the reason why I have the feeling that i'm missing some important details about such a framework.
So is my understanding right about a mock framework? Or am i missing alot of details?