Extenject(Zenject)のTestがNSubstituteをサポートしていた
割と最近の出来事だった
元々Zenjectはテスト時のモックライブラリとしてMoqを採用していたんだけど、このPRでまた別のモックライブラリであるNSubstituteを使えるようになった。選択肢が増えたのだった。
Moq
NSubstitute
使い方
まだreleasesには含まれていないのでmasterブランチから直接取ってくることにはなる。
Assets\Plugins\Zenject\OptionalExtras
に新しくAutoSubstitute.zip
があるので、展開してAssets\Plugins\Zenject\OptionalExtras\TestFramework
下に放り込んであげましょう。
雑にIFooを作る
public interface IFoo { string SayFoo(string suffix); }
DummyObjectを作るだけなら、FromSubstitute
を呼ぶだけでOK
Container.Bind<IFoo>().FromSubstitute();
メソッドが呼ばれたかとか諸々確認したいときはRecievedをメソッドチェーンに挟む
var foo = Substitute.For<IFoo>(); // 引数で"Bar"が渡されると"FooBar"を返す。それ以外が来るとFail foo.Received().SayFoo("Bar").Returns("FooBar");
すでにUnityで使ってる事例があったのでこっちを見るほうがよさそう。 qiita.com
どちらを選ぶかは割と好みだけど、個人的にはNSubstituteの方がメソッドチェーンで書きやすくて好き。