uber/mockoloとは
というものです。
mockoloはv1.1.3からprotocolだけでなくclassのモック生成もできるようになったのだけど、これを実際に使おうとしてみると生成されたコードがコンパイルエラーになった。
具体的には、次のようなデフォルト値ありのpropertyを持つclassで問題が発生していた。
class Foo {
var foo: Int = 0
}
class FooMock: Foo {
private(set) var fooSetCallCount = 0
override var foo: Int = 0 { didSet { fooSetCallCount += 1 } }
}
- stored propertyをoverrideして新たなデフォルト値を代入することはできない
- stored propertyを新たなデフォルト値でoverrideしようとして、そこにproperty observer (
willSet
/didSet
)を付けようとすると Variable with getter/setter cannot have an initial value
というおかしなコンパイルエラーになる
- property observerはgetter/setterではない
propertyのモックにデフォルト値を代入するのは元々protocolモック用の実装だったので、classモックではデフォルト値を代入しないようにして解決した。
github.com
これによって生成コードはこうなる:
class FooMock: Foo {
private(set) var fooSetCallCount = 0
override var foo: Int { didSet { fooSetCallCount += 1 } }
}
ということで、こちらの修正が含まれたv1.3.2がリリースされていたので、どうぞお使いください。mockoloのclassモックはあまり枯れていないようなので枯らしていきましょう。