2010-04-20 25 views
2

我寫了一些單元測試,我得到嘗試做以下時,從我的實際代碼拋出的異常:C#的Visual Studio單元測試,懲戒了客戶端IP地址

string IPaddress = HttpContext.Current.Request.UserHostName.ToString(); 

是否有如何在不重寫我的代碼來接受IP地址作爲參數的情況下模擬IP地址?

謝謝!

回答

5

看看Dependency Injection

基本上,通過將數據推入(例如在本例中)「上下文」或「設置」類的類中來解決此類問題。

public interface IAppContext 
{ 
    string GetIP(); 
} 

然後,您有一個督促落實,做真實的東西和你測試一個模擬的還是假的。

public class AppContext : IAppConext 
{ 
    public string GetIP() 
    { 
    return HttpContext.Current.Request.UserHostName.ToString(); 
    } 
} 

的應用方面得到被推到使用IP地址的類...

OH-和據我知道有沒有內在的嘲弄任何VS版本,您將需要檢查其中之一 - Rhino mocks,Moq ...有很多!另請參閱typemock,但它採用了不同的方法。

PK :-)

+0

是的,我知道依賴注入,我只是想避免改變我現有的代碼:( – Jimmy 2010-04-20 21:44:17

+0

有型模擬 - http://site.typemock.com/ - 但我從來沒有使用它,我一直有時間來改變代碼!;-) – 2010-04-20 21:48:09