くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

moq で 非同期メソッドの返り値を設定する

やりかた

メソッドの返り値を設定するときに Returns の代わりに ReturnsAsync を使う。

コード

[TestFixture]
public class TestClass
{
    [Test]
    public async Task TestMethod()
    {
        var hogeMoq = new Mock<Ihoge>();
        hogeMoq.Setup(obj => obj.getHtml()).ReturnsAsync("Hello World");

        var Actual = await hogeMoq.Object.getHtml();

        Assert.AreEqual("Hello World", Actual);
    }
}

public interface Ihoge
{
    Task<string> getHtml();
}

public class hoge:Ihoge
{
    public async Task<string> getHtml()
    {
        using (var client = new HttpClient())
        {
            var result =await client.GetAsync("www.yahoo.co.jp");
            return await result.Content.ReadAsStringAsync();
        }
    }
}

https://lh3.googleusercontent.com/-0MTFJFZAl0s/WXMW-9eOJ4I/AAAAAAAALJo/T7MfQkatA7gVJRYwOSdl2WRoLs7JJCPCgCHMYCw/s0/devenv_2017-07-22_18-12-25.png