C#でMoqを使ったテスト
最近C#でテストコード書いているので、学んだことを忘れないうちに残しておこうと思います。
Callback
これがメイン。 Callbackを使ったテストがイマイチわからず苦戦しました。 ただやることは簡単。 モック化したメソッドの引数を取得することができます。 それにより戻り値がないメソッドでも、正常に値がセットされているのか確認できる!というもの。
例えばこんなメソッド。(細かい書き方は置いといて。。。)
SomeThing someThing = SomeThing.Instance();
public void Sample(string name)
{
var entity = new User();
entity.Name = name;
someThing.Do(entity);
}
実際テストするなら
public void Sample_Test()
{
var someThing = new Mock<SomeThing>();
User user = null;
someThing.SetUp(s => s.Do(It.IsAny<User>())).Returns((User)null).Callback<User>(e => user = e);
string name = "ronkun";
var expected = "ronkun";
var sut = new テスト対象クラス();
sut.someThing = someThing.Object;
sut.Sample(name);
Assert.That(user.name , Is.EqualTo(expected));
}
と、こんな感じになります。