我可以在没有包装的情况下模拟httpClient.PostAsync()调用吗?

Ben

我正在使用Moq编写测试,并且能够模拟HttpClientHandler进行GetAsync()调用,但是当我尝试模拟PostAsync()时,它将返回null。有没有一种方法可以模拟该功能,而无需在整个HttpClient周围创建包装器?

下面是我模拟该功能的单元测试代码。

Mock<WebProxy> mockWebProxy = new Mock<WebProxy>();
        mockWebProxy.Object.Address = new Uri(configuration.GetSection("TestProxy").Value);
        mockWebProxy.Object.UseDefaultCredentials = true;
        Mock<HttpClient> mockHttpClient = new Mock<HttpClient>();
        var mockHttpClientHandler = new Mock<HttpClientHandler>();
        mockHttpClientHandler.Object.Proxy = mockWebProxy.Object;
        mockHttpClientHandler
            .Protected()
            .Setup<Task<HttpResponseMessage>>(
                "SendAsync",
                ItExpr.IsAny<HttpRequestMessage>(),
                ItExpr.IsAny<CancellationToken>()
            )
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content = new StringContent("this is a test")
            })
            .Verifiable();
        mockHttpClient = new Mock<HttpClient>(mockHttpClientHandler.Object, true);

然后我在这里调用PostAsync():

var response = await httpClient.PostAsync(new Uri(url), stringContent);

不模拟httpClient时,PostAsync()起作用。但是,当进行模拟时,上面的响应为null。这告诉我正在使用模拟的HttpClient,因为没有响应,但是我不确定为什么它为null,而不是我模拟的不适用于GetAsync()的HttpResponseMessage。

您将需要一个包装器。

您的设置是针对SendAsync它的它在基HttpMessageInvoker类中是虚拟的,因此是可重写的,但是您正在调用PostAsync,它是公共的且不是可重写的。

很酷的事情HttpClient是,一旦将其包装,就可以重复使用。伸出一口子弹(如果可以的话)并包好。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

我可以在没有警告的情况下打开F#清单的包装吗?

来自分类Dev

我们可以在没有事件处理程序的情况下模拟按键吗?

来自分类Dev

我可以在没有https的情况下将我的应用发布到App Store吗?

来自分类Java

我可以使用Spring Boot在没有任何数据库的情况下使用Spring Data JDBC模拟CrudRepository吗?

来自分类Dev

我可以在没有svg文件的情况下创建JSVGCanvas吗?

来自分类Dev

我可以在没有数据绑定的情况下使用MVVM吗?

来自分类Dev

我可以在没有任何WooCommerce页面的情况下使用WooCommerce功能吗?

来自分类Dev

我可以在没有jquery的情况下使用twitter bootstrap吗?

来自分类Dev

BeautifulSoup:我可以在没有添加额外标签的情况下进行美化吗?

来自分类Dev

我可以在没有鼠标事件的情况下获得OpenCV中的鼠标位置吗?

来自分类Dev

我可以在没有任何实例变量的情况下使用decltype吗?

来自分类Dev

我可以在没有Django的情况下使用芹菜吗

来自分类Dev

朱莉娅:我可以在没有`makedocs`的情况下运行doctests吗?

来自分类Dev

我可以在没有动画的情况下更改strokeEnd属性吗?

来自分类Dev

我可以在没有引导CSS的情况下使用fontawesome图标吗?

来自分类Java

我可以在没有UncheckedException的情况下使用Collections.EMPTY_LIST吗?

来自分类Dev

我可以在没有交换分区的情况下使Linux休眠吗?

来自分类Dev

我可以在没有Visual Studio的情况下编译DLL吗?

来自分类Dev

我可以在没有ORM的情况下从Django查询辅助数据库吗?

来自分类Java

我们可以在没有main()方法的情况下执行Java程序吗?

来自分类Dev

我可以在没有底层容器的情况下使用std :: upper_bound吗?

来自分类Java

我可以在没有粘性会话的情况下使用Thymeleaf模板+绑定吗?

来自分类Java

我可以在没有方法的情况下实例化对象吗?

来自分类Dev

我可以在没有编译器的情况下使用JSPM吗?

来自分类Dev

我可以在没有类的情况下扩展通用文件吗?

来自分类Dev

我可以在没有activerecord的情况下使用超级堆栈吗?

来自分类Dev

我可以在没有Bower或NPM的情况下安装Angular Material库吗?

来自分类Dev

我可以在没有线程的情况下使用pthread_sigmask吗?

来自分类Dev

我可以在没有Cargo.toml的情况下使用Cargo安装库吗?

TOP 榜单

热门标签

归档