我有一个集成测试,从第三方服务器获取一些json结果.它非常简单,效果很好.
我希望停止实际点击这个服务器并使用Moq(或任何Mocking库,如ninject等)来劫持并强制返回结果.
这可能吗?
以下是一些示例代码: -
public Foo GoGetSomeJsonForMePleaseKThxBai()
{
// prep stuff ...
// Now get json please.
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Http://some.fancypants.site/api/hiThere);
httpWebRequest.Method = WebRequestMethods.Http.Get;
string responseText;
using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
{
json = streamReader.ReadToEnd().ToLowerInvariant();
}
}
// Check the value of the json... etc..
}
Run Code Online (Sandbox Code Playgroud)
当然,这个方法是从我的测试中调用的.
我在想,也许我需要传递给这个方法(或类的属性?)一个嘲笑httpWebResponse或者什么,但是不太确定这是不是这样.此外,响应是httpWebRequest.GetResponse()方法的输出..所以也许我只需要传入一个模拟HttpWebRequest?
任何带有示例代码的建议都会得到最多的评价!