Moq httpclient 第二次返回空字符串

Kev*_*ton 5 c# unit-testing moq httpclient

我目前有这样的代码:

var fieldBoundary = Properties.Resources.TestFieldBoundary;

httpClient.Setup(
    x =>
        x.GetAsync(It.Is<Uri>(url => url.AbsoluteUri == APIUrl.AbsoluteUri + <my url>)))
    .Returns(
        Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(Encoding.Default.GetString(fieldBoundary))
        }));
Run Code Online (Sandbox Code Playgroud)

第一次使用这个模拟 http 客户端时,我得到了我期望的响应。但是,当我第二次使用相同的模拟对象调用相同的 URL 时,我得到了成功的响应,但响应是空字符串或零长度字节数组。关于如何以不同的方式进行最小起订量的想法?

Nko*_*osi 5

更改Returms为使用函数。

httpClient
    .Setup(x => x.GetAsync(It.Is<Uri>(url => url.AbsoluteUri == APIUrl.AbsoluteUri + <my url>)))
    .Returns(() => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) {
            Content = new StringContent(Encoding.Default.GetString(fieldBoundary))
        })
    );
Run Code Online (Sandbox Code Playgroud)

每次调用模拟方法时,它都会调用该函数,而不是在重复调用时返回相同的实例。这就是为什么当您第二次进行调用时,字符串内容流指针已经位于末尾。