2012-04-07 57 views
0

我有一個使用masterpage.asx.cs中的Request.UrlReferrer.Host的方法。如何爲單元測試中的httprequest usercontrol的請求分配一個值?

protected string DoSomething() 
{ 
    Request.UrlReferrer.Host is used 
//Request is of httprequest usercontrol 
} 

我想爲這種方法編寫一個單元測試用例。

並且有一個調用target.DoSomething()但該請求具有空值。我怎樣才能給它一個值,以便DoSomething()方法不會中斷?

請幫忙。

謝謝。

回答

0

我打算推薦一種不同的方法,因爲這些值在HttpRequest內不可設置。

寫一個類,其唯一的職責是處理HttpRequest併產生相應的輸出。然後從該類中提取一個接口。然後DoSomething將取決於該界面。爲了您的測試,您將能夠提供一個「假」或一個替代實現,可以爲該方法隨後在其邏輯中使用的數據提供服務。

例如,您可能有

interface ICanHandleRequest { } 

的界面,您可以在您的生產代碼,然後讓你的DoSomething的方法通常使用的實現。

class RequestHandler : ICanHandleRequest { } 

但是對於您的測試,您將創建一個不同的實現,以便可以測試您的DoSomething方法。

class TestHandler : ICanHandleRequest { } 

你也可以用嘲諷庫(如Rhino Mocks,例如)建立這樣的假貨,如果你選擇。這個想法是,DoSomething不需要知道如何使用HttpRequest,它有其他的責任。它只需要輸出。在生產中,這些數據將來自您的真實課程,它將使用HttpRequest。對於測試,您可以簡單地將實現替換爲可以生成適合您測試的數據的內容。合理?

相關問題