【发布时间】:2014-03-06 11:32:08
【问题描述】:
我有一个服务使用Microsoft.Net.Http 来检索一些Json 数据。太好了!
当然,我不希望我的单元测试到达实际的服务器(否则,这是一个集成测试)。
这是我的服务 ctor(使用依赖注入...)
public Foo(string name, HttpClient httpClient = null)
{
...
}
我不知道如何用 ... 说 .. Moq 或 FakeItEasy 来模拟这个。
我想确保当我的服务调用 GetAsync 或 PostAsync 时,我可以伪造这些调用。
有什么建议吗?
我 - 希望 - 我不需要自己制作 Wrapper .. 因为那是废话 :( 微软不可能对此有所疏忽,对吧?
(是的,制作包装很容易......我以前做过......但这就是重点!)
【问题讨论】:
-
“我 -希望 - 我不需要自己制作 Wrapper” - 你使用了多少
HttpClient的方法和属性?为这些创建一个接口通常会很有用,然后您可以对其进行模拟。 -
(就像我在 OP 中提到的那样)同意 - 这很容易和简单......但我会认为我不应该这样做?这应该是核心..对吗?这是我唯一的选择吗?
-
据我所知,如果这些呼叫是虚拟的,您可以将它们存根。因为他们不是,我假设你需要编写一个包装器(这是 imo 更清洁的方式)。
-
在这种情况下,请参阅Non Interface dependent Mocking Frameworks for C#,我通过 ".net mock not virtual methods without interface" 找到了它。接受的答案建议使用.NET Moles,这是我所知道的唯一一个无需虚拟方法即可工作的.NET 模拟框架。
标签: c# .net mocking dotnet-httpclient microsoft-fakes