fake4swift
is a command line tool that generates type-safe test doubles for Swift.
This is handy if you want to easily generate mocks for protocols in Swift.
brew install tjarratt/fake4swift/fake4swift
git clone https://github.com/tjarratt/fake4swift.git
git submodule update --init --recursive
make prefix_install
Given a swift protocol...
protocol MySomewhatSpecialProtocol {
func doesStuff(stuff: String, otherStuff: [String]) -> ([String], Int)
}
Run the fake4swift cli...
fake4swift path/to/MySomewhatSpecialProtocol.swift MySomewhatSpecialProtocol
It will generate a test double near it...
path/to/fakes/FakeMySomewhatSpecialProtocol.swift
You can use the generated fake in tests like so...
describe("a generated fake for a contrived protocol") {
var subject : FakeMySomewhatSpecialProtocol!
beforeEach() {
subject = FakeMySomewhatSpecialProtocol.init()
}
it("conforms to the MySomewhatSpecialProtocol protocol") {
var test : MySomewhatSpecialProtocol
test = subject
expect(test).toNot(beNil())
}
it("allows you to stub the return value for methods that return values") {
subject.doesStuffReturns((["test-yo"], 5))
let tuple = subject.doesStuff("this", otherStuff: ["that"])
expect(tuple.0).to(equal(["test-yo"]))
expect(tuple.1).to(equal(5))
}
it("allows you to write assertions for the arguments passed into each invocation") {
subject.doesStuffReturns(([], 0))
subject.doesStuff("kool", otherStuff: ["keith"])
var args = subject.doesStuffArgsForCall(0)
expect(args.0).to(equal("kool"))
expect(args.1).to(equal(["keith"]))
subject.doesStuff("dr", otherStuff: ["octogon"])
args = subject.doesStuffArgsForCall(1)
expect(args.0).to(equal("dr"))
expect(args.1).to(equal(["octogon"]))
}
}
typealias
or associatedtype
The backlog of features for this plugin is currently in Pivotal Tracker.
Found a bug? Have a feature request? Interested in submitting a pull request? Please open an issue on Github (or just issue a pull request directly if the fix is pretty clear).
brew uninstall tjarratt/fake4swift/fake4swift
Brian Croom -- fixed obnoxious fake4swift
CLI warnings and added build infrastructure
Rachel Brindle -- contributed expertise with Carthage, dynamic linking, homebrew
Helen Tang -- created the 'fake mustache' icon (disguise by Helen Tseng from the Noun Project)
Ludmil -- created the 'swift' icon (swallow by ludmil from the Noun Project)