2008-10-28 176 views
0

我挣扎的依赖性在下面的代码分离:如何注入WebRequest/Response依赖项?

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); 

    } 

基本上我想单元测试不依赖于请求到外部网站。

要做这件事的最好方法是什么?

回答

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将覆盖任何虚拟属性。