2008-12-14 48 views
2

我正在設置單元測試和集成測試,但我遇到了問題,web.config中的連接字符串不可用於測試。我們爲解決這個問題而提出的解決方案是有另一個用於測試的連接字符串,但我想知道是否有更好的方法。最好的方式來測試ASP.Net數據驅動的應用程序

問題的另一半是設置和拆除測試數據庫。現在我們只需要進行一個巨大的測試,在運行之前設置db,然後再將其分解。這樣我們就可以控制測試運行的順序,以確保結果是正確的。

只是看看是否有更好的方式/工具用於測試ASP.Net應用程序。

回答

0

推薦的方法是構建您的系統,您可以在沒有數據庫的情況下測試您的代碼。這對代碼視角意味着使用分離關注。您希望您的所有核心業務邏輯都與您的頁面分離。你可以使用MVC或MPV模式來做到這一點,如果你很好,你可以找到很多。

現在有ASP.Net MVC;然而,在這個框架存在很久以前,MVC模式已經在ASP.Net中使用了,所以如果你正在尋找增強現有的web表單應用程序,確保你最終不會看到最近關於ASP.Net MVC的嗡嗡聲,因爲ASP.Net中的編程模型。

現在讓我們假設你有你的核心邏輯來處理從頁面分離的按鈕單擊,所以你有一個類讓我們稱之爲WidgetController。小部件控制器可能有一個HandleClick()方法來執行業務邏輯。

讓我們進一步假設您的業務邏輯需要數據訪問。您可以再次使用關注點分離。你的業務邏輯不應該關心如何訪問數據庫,它只需要數據讓其他類獲取數據。分離數據的流行方式是使用Depedancy Injection或Inversion of Control模型(DI,IoC respectivley)。本質上你所做的是爲你的數據訪問定義一個接口,你的控制器將根據接口進行編程。然後,您在運行時通過某種方法(屬性,構造函數等等)向您的控制器提供實際的類...

這樣做可以讓您在運行時提供MOCK實現,以分離您的數據庫。模擬將實現你的界面,你可以將你的測試需要的對象添加到內存中。

0

在您的單元測試中,隔離數據訪問代碼並將其抽象出來(通常使用接口,例如repository pattern),以便在單元測試中沒有任何數據庫代碼。相反,使用模擬框架(例如Moq)模擬您的數據訪問抽象。這樣,您的測試將快速運行,這是您需要確保您經常運行所有測試。

當你需要測試整個系統,包括數據庫,你在做集成測試。爲此,請查看Fitnesse。有一個good book on it

1

實際上,正如前面提到的,嘲笑和使用存根來測試系統交互而沒有數據庫交互是很好的,但是集成測試只是一個有效的測試。

你提到關於腳本化數據庫表和數據,然後在所有集成測試之前運行安裝腳本,這是一個相當明智的方法。

不知道你有多少ORM的粉絲,但使用NHibernate,你可以從映射重建你的表。在重建數據庫之後,我通常只需要一個腳本來物理創建對象並通過NHibernate持久化它們。我知道這不是最好的方法,但我通常會發現我需要的啓動測試數據量並不大,而且通過NHibernate插入也是一種測試本身:-)。

我從來沒有使用Fitnesse正如「邁克斯科特」所提到的,但我聽到了很好的東西,它看起來很有趣。這也是臭名昭着的Billy McCafferty 文章,它給出了一些很好的通用開發最佳實踐,如單元測試,DDD,設計合同等一個很好的breif介紹。