为什么ContinueWith不能在NUnit测试中使用FromResult创建的任务上运行

时间:2018-01-12 14:00:08

标签: nunit

我有一个我想测试的课程,其中(简化)看起来像这样:

public interface IHttpClient
{
    Task<string> GetStringAsync(string url);
}
class Downloader
{
    public string content = "";
    public void Download(IHttpClient client)
    {
        client.GetStringAsync("http://someurl").ContinueWith((t) =>
        {
            content = t.Result;
        });
        // Do some other struff async
    }
}

关键是,它使用ContinueWith在下载仍在运行时执行某些操作。

我有一个单元测试,如下所示:

    [Test]
    public async Task TestContinueWith()
    {
        var httpMock = new Mock<IHttpClient>();
        httpMock.Setup(p => p.GetStringAsync("http://someurl")).Returns(
            Task.FromResult("SomeContent")
            );
        Downloader d = new Downloader();
        d.Download(httpMock.Object);
        Assert.AreEqual("SomeContent", d.content);
    }

因内容为“​​”而失败。 但为什么? FromResult创建一个完成的任务,应该执行ContinueWith吗?

或者,在某些情况发生之前,ContineWith是否会被运行?我该如何解决这个单元测试?

0 个答案:

没有答案