如何注入WebRequest / Response依赖项?

时间:2008-10-28 21:10:45

标签: c# tdd dependency-injection mocking

我正在努力将以下代码中的依赖项分开:

    public static SiteConnector ConnectToSite(String Logon, String Password)
    {

        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_URI);
        ConfigureRequest(Logon, Password, webRequest);
        HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
        Cookie ReposonseCookie;
        //this looks for a cookie and spitsout a value based on response
        int value = ProcessResponse(webResponse,out  ReposonseCookie);

        return new SiteConnector(ReposonseCookie, value);

    }

基本上我想在不依赖外部网站请求的情况下进行单元测试。

最好的解决方法是什么?

1 个答案:

答案 0 :(得分:2)

不确定那个班级是如何从头顶看出来的,但是你总是可以将它们包裹在你自己的可测试类中。

public class WebRequestWrapper
{
   internal WebRequestWrapper() {..}

   public WebRequestWrapper(WebRequest req)
   {
      _innerRequest = req;
   }


   public virtual string Url
   {
      return _innerReq.Url;
   }

   //repeat, make all necessary members virtual
}

然后您可以使用RhinoMocks创建此类的PartialMock。 IT将覆盖任何虚拟属性。