2012-09-05 74 views
5

由於我對Web應用程序開發相當陌生,目前在實現某些測試功能時遇到了一些困難。通過url參數創建testmode,該參數將值插入到表單中

由於我目前的工作(一個MVC 3 Web應用程序處理費),我被要求創造出可以通過這種方式URL訪問的測試模式項目的一部分:

http://websiteurl?testmode=1 

的這背後的想法是,當開發團隊中的一個將testmode參數添加到URL時,會自動生成一組表單值,以便在每次測試應用程序時節省輸入數據的時間。

目前,我有一個,如果在使用的Request.QueryString設置以下參數的控制語句是我目前使用的代碼:

if (Request.QueryString.AllKey.Contains("tm")) 
{ 
    if (Request.QueryString["tm"] == 1) 
    { 
     insert values to be generated 
    } 
} 

鑑於背景下,如果任何將是什麼是最好的方法實現這一目標?

是否有可能使用模擬框架(如Moq或RhinoMocks)來創建虛假的存儲庫而不是從數據庫中檢索結果,還是將數據庫中預先加載的測試數據更好?

回答

2

首先我會封裝你的「TestMode」檢查。

我想創建一個基本的控制器,並添加以下屬性:

// I would consider retrieving this from web.config 
protected string testModeKey = "tm"; 

public bool IsTestContext 
{ 
    get 
    { 
     return Request.QueryString[testModeKey] != null; 
    } 
} 

另外,考慮寫一個擴展方法放在HttpRequest:

public static bool IsTestContext(this HttpRequest request, string testModeKey = "tm") 
{ 
    request.QueryString[testModeKey] != null; 
} 

這是出路。讓我們考慮如何插入值。我在這裏做了一些假設,但我會對控制器單元可測試感興趣。

我假設您的數據是從IDataRepository返回的,並且您有兩個存儲庫實現:FakeDataRepository和ReadDataRepository。

然後,您可以編寫一個工廠或一個簡單的ifelse語句來決定使用哪個存儲庫。

IDataRepository DataRepository { get; set; } 

if (Request.IsTestContext) 
    DataRepository = new FakeDataRepository(); 
else 
    DataRepository = new RealDataRepository(); 

這將適用於你想要它做的事情,但在我看來這不是一個好的方法。我會研究你的控制器的單元測試。你能提供更多關於你想測試的細節嗎,因爲我在這裏做了很多假設和猜測?

0

讓你對應用程序當前如何佈局我提供詳情如下幾個細節:

應用程序的基本結構按照項目的絲綢模板,打破應用到業務邏輯,數據層,演示文稿和單元測試,我實現此測試模式的控制器已經從基本控制器繼承,該控制器當前包含Microsoft.Practices.ServiceLocation模式的實現。

服務定位器訪問在業務邏輯域項目中找到的四個服務,其中三個包含三個下拉列表值的訪問存儲庫第四個訪問支付解決方案(SagePay)的事務服務的實現集成到應用程序中,使用SagePayMvc.dll。

所有存儲庫都繼承自一個基本存儲庫我目前有六個存儲庫從這個基地繼承,三個用於填充下拉列表另外三個關於學生,持卡人和訂單詳細信息的存儲信息testmode基本上正在訪問當前正在填充學生詳細信息表格的學生儲存庫當前可以使用JQuery填充持卡人詳細信息。

業務邏輯中有兩組模型,數據層中有兩組模型,其中模型驗證在業務邏輯域中定義。

我通過它訪問模型的視圖模型目前正在使用領域模型。

爲了創建存儲庫,我使用實體框架代碼優先方法,它當前創建的存儲庫作爲數據庫,其中表與每個定義的模型相對應。

此測試模式的目的是快速填充非唯一表單字段(我目前有一些邏輯實現,阻止學生輸入已存在的名稱),以便當其他成員使用該應用程序時他們可以快速評估應用程序是否工作,特別是在設計團隊將樣式應用到應用程序時。

我目前有一個測試類設置,用於測試學生信息庫可以創建新學生的聲明,我在此處定義的數據訪問使用Moq定義的虛擬信息庫。

+0

還應該注意,這將是其他四種測試模式之一,其中一種將在美國付款時填寫表格,一種將值保存到不同的數據庫,第四種我已經完成重定向到成功頁面 – CryoFusion87