2011-04-08 43 views

回答

1

如果你的意思是「對我單元測試HttpApplication類本身是否合理」 - 不。除非你是ASP.NET團隊的開發人員,否則不會。一般來說,你應該單元測試你正在編寫的代碼,而不是其他人的代碼。但是,如果你的意思是「對我的單元測試依賴於HttpApplication的類是否有意義」,那麼很可能是的。它可能是你有類爲了聲明你自己的類行爲正確,它嘲笑(或否則僞造)HttpApplication類是很有意義的。

+0

你會定義IMyFunkyHttpApplication接口,然後在MyFunkyMvcApplication中實現接口:IMyFunkyHttpApplication?這不是我的想法。我正在查看某人的代碼,並想知道重點是什麼。 – user669226 2011-04-08 10:46:19

+0

如果我正確理解你的問題:有一個接口和一個實現接口的具體實現是很常見的。這樣做的主要原因是將代碼的使用者與實際實現分離開來。換句話說 - 你的代碼使用SomeDependency的地方,它實際上通過ISomeDependency調用它。當你來測試時,你現在可以嘲笑這種依賴。這可以讓你測試你的消費者代碼,而不需要在依賴項中測試別人的代碼。它還使您可以斷言您的客戶正確地調用了依賴關係。 – 2011-04-08 11:08:40

+0

我同意HttpApplication本身不應該被測試。但是,我肯定會測試存儲在HttpApplication的子項中的任何應用程序特定的邏輯(通常在Global.asax.cs中)。在MVC項目中,該類保存配置代碼,在webforms中包含應用程序級事件處理程序。嘲笑在這種情況下幫助很大,或手動創建假貨 – Roman 2011-10-13 21:16:42

0

是的,如果你打算在單元測試中使用它,你需要嘲笑它。

我會做這樣的:

1:添加一個公共靜態屬性/方法MvcApplication(在global.cs)

public static string MyProperty { get; set; } 

2:創建一個接口

public Interface IApplication 
    { 
     string MyProperty {get;set;} 
    } 

3:爲你創建一個包裝類MvcApplication並實現接口

public class MvcApplicationWrapper: IApplication 
{ 
    public string MyProperty 
       { 
        get{ 
       return MvcApplication.MyPropetry; 

        } 
       set{ 
       MvcApplication.MyPropetry = value; 
        } 

       } 
} 

4:控制器延遲加載上創建一個公共財產IApplication

private IApplication app; 
public IApplication Application{ 
get{ 
if(app == null){ 
app = new MvcApplicationWrapper(); 
} 
return app; 
} 
set 
{ 
app = value; 
} 
} 

5:當你的單元測試,創建一個嘲笑IApplication並設置控制器的應用特性

var controller = new Controller(); 
controler.Application = new MockApplication(); 
/* do you tests */