C# で単体テストで moq を使用した場合のお話です。
備忘録として残しておきます。
以下のようなインターフェイスがあったとします。
public interface IHoge
{
Task SomethingAsync(int x);
}
これを moq
でセットアップする場合、以下のように書く必要があります。
Mock<IHoge> hogeMock= new Mock<IHoge>();
hogeMock.Setup(m => m.SomethingAsync(It.IsAny<int>())).Callback<int>((value) =>
{
// Assert.Equal 等の何かしらの処理をここに記述
}).Returns(Task.CompletedTask);
重要なのが .Returns(Task.CompletedTask)
の部分で、 Task async
で実装されるメソッドにはこれをセットアップする必要があります。
でないと、メソッドをコールしても NullReferenceException
の例外が投げられてしまいます。
なんとも不親切な例外なので、かなりハマりました・・・
コメント