Mock-Generation-Swift icon indicating copy to clipboard operation
Mock-Generation-Swift copied to clipboard

A Sourcery template to automatically generate mocks from Swift protocols.

Mock-Generation-Swift

A Sourcery template to automatically generate mocks from Swift protocols.

For each protocol implementing AutoMockable it will...

Create a class called ProtocolNameMock in which it will...

For each function:

  • Implement the function
  • Add a functionCalled boolean to check if the function was called
  • Add a functionRecievedArguments tuple to check the arguments that were passed to the function
  • Add a functionReturnValue variable and return it when the function is called.

For each variable:

  • Add a gettable and settable variable with the same name and type

Issues and limitations:

  • Overloaded methods will produce compiler erros since the variables above the functions have the same name. Workaround: delete the variables on top of one of the functions, or rename them.
  • Handling success/failure cases (for callbacks) is tricky to do automatically, so you have to do that yourself.
  • This is not a full replacement for hand-written mocks, but it will get you 90% of the way there. Any more complex logic than changing return types, you will have to implement yourself. This only removes the most boring boilerplate you have to write.

Usage:

You will need Sourcery for this to work. See the Sourcery readme for more info.

Pull requests welcome!