Real World Mocking in Swift by Veronica Ray:
OCMock has severe limitations in Swift
because Swift does not have reflection
If you are not using a DI framework you can still manually inject dependencies
DI - simply means giving an object it’s instance variables
Constructor Injection -
have a default constructor with real ivar,
convenience constructor with DI injected objects
Stubs - fake a method call
Mocking with protocols is better than subclassing
What makes a good mock?
- Quick and easy to write
- Relatively short and does not contain much information you don’t need
- Legitimate reason to not use real object
More value type, less mocking needed
Related: Boundaries, Complexity
Partial mock an anti-pattern?
what is real? what is fake?
Partial mock decreases comprehensibility of tests
I disagree on this point too
I get wary every time I hear a pattern is anti-pattern because a pattern is only anti because of the way you use it WRONGLY
Partial mock is usually subclassing the actual object and override part of it so as to “mock” it
It is a simple way to achieve mocking
With Swift nested type testing with partial mocks defined right in the test case makes clear what is real, what is fake