鉴于以下代码,我试图弄清楚如何将 FakeItEasy 与 HttpClient 一起使用:
public Foo(string key, HttpClient httpClient = null)
{ .. }
public void DoGet()
{
....
if (_httpClient == null)
{
_httpClient = new HttpClient();
}
var response = _httpClient.GetAsync("user/1);
}
public void DoPost(foo Foo)
{
if (_httpClient == null)
{
_httpClient = new HttpClient();
}
var formData = new Dictionary<string, string>
{
{"Name", "Joe smith"},
{"Age", "40"}
};
var response = _httpClient.PostAsync("user",
new FormUrlEncodedContent(formData));
}
所以我不知道如何使用FakeItEasy
,来伪造 HttpClient 的GetAsync
和PostAsync
方法。
生产代码不会通过 HttpClient,但单元测试会通过 FakeItEasy 制作的假实例。
例如。
[Fact]
public void GivenBlah_DoGet_DoesSomething()
{
// Arrange.
var httpClient A.Fake<HttpClient>(); // <-- need help here.
var foo = new Foo("aa", httpClient);
// Act.
foo.DoGet();
// Assert....
}
更新:
我认为 FiE(和大多数模拟包)适用于接口或虚拟方法。所以对于这个问题,让我们假设 and 方法是虚拟的......GetAsync
请PostAsync
:)