ただ日々を記すもの

意識高めを装うことができます

MoqでCallbackを使ってみる(C#)

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));
}

と、こんな感じになります。