專利名稱:一種在mvc 中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及ー種使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)的方法,具體涉及ー種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式。
背景技術(shù):
目前在MVC的単元測(cè)試中,對(duì)控制器方法進(jìn)行單元測(cè)試時(shí),涉及到調(diào)用數(shù)據(jù)訪問(wèn)的添加、修改、刪除、查詢時(shí),往往需要真實(shí)的數(shù)據(jù)庫(kù)服務(wù)器支持,才能正常運(yùn)行單元測(cè)試代碼。通過(guò)對(duì)以往単元測(cè)試的分析,發(fā)現(xiàn)存在著諸多不便實(shí)現(xiàn)的問(wèn)題。其具體問(wèn)題包括
1、首先執(zhí)行單元測(cè)試時(shí),需要真實(shí)的數(shù)據(jù)庫(kù)服務(wù)器支持;
2、編輯和刪除數(shù)據(jù)的單元測(cè)試將更改數(shù)據(jù)庫(kù)的狀態(tài),這就需要每ー輪的単元測(cè)試都具有干凈的數(shù)據(jù)庫(kù)環(huán)境;
3、在對(duì)控制器方法進(jìn)行單元測(cè)試時(shí),如果被測(cè)試方法中需要調(diào)用另一個(gè)類中的某個(gè)方法,并且需要獲得該方法的返回值,才能正確執(zhí)行。如果被調(diào)用的方法由于某種原因沒(méi)有開(kāi)發(fā)完成,在這種情況下,要想對(duì)此方法進(jìn)行測(cè)試,只能等待被調(diào)用類開(kāi)發(fā)完成。
發(fā)明內(nèi)容
發(fā)明提供了ー種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,目的在于解決單元測(cè)試對(duì)真實(shí)數(shù)據(jù)庫(kù)和其他外部組件的依賴,提供ー種新型的臨時(shí)的存儲(chǔ)庫(kù)模式,更大的優(yōu)化單元測(cè)試的靈活性、可測(cè)試性。樣處理廠的告知系統(tǒng)為實(shí)現(xiàn)上述技術(shù)目的,達(dá)到上述技術(shù)效果,本發(fā)明通過(guò)以下技術(shù)方案實(shí)現(xiàn)
ー種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,其特征在于,包括以下步驟
步驟I)添加存儲(chǔ)庫(kù),定義一個(gè)訪問(wèn)數(shù)據(jù)庫(kù)的接ロ ;
步驟2)創(chuàng)建測(cè)試驅(qū)動(dòng),實(shí)現(xiàn)mock存儲(chǔ)庫(kù);
步驟3)添加測(cè)試類支持,在目標(biāo)測(cè)試類中定義兩個(gè)構(gòu)造函數(shù);
第一個(gè)構(gòu)造函數(shù)是無(wú)參數(shù)構(gòu)造函數(shù),第二個(gè)構(gòu)造函數(shù)采用了 IContactRepository類型的參數(shù),所述第二個(gè)構(gòu)造函數(shù)將由單元測(cè)試傳入所述mock存儲(chǔ)庫(kù);所述第一個(gè)構(gòu)造函數(shù)將創(chuàng)建EF_ContactR印ository類的實(shí)例,當(dāng)調(diào)用控制器中的操作方法吋,MVC管道將調(diào)用所述第一個(gè)構(gòu)造函數(shù);
步驟4)添加測(cè)試,在所述測(cè)試類中編寫(xiě)測(cè)試方法,調(diào)用所述第二個(gè)構(gòu)造函數(shù)。本發(fā)明的原理是
本發(fā)明使用具有MVC和TDD的存儲(chǔ)庫(kù)模式,需要測(cè)試人員為數(shù)據(jù)訪問(wèn)類創(chuàng)建接ロ;對(duì)控制器方法進(jìn)行單元測(cè)試時(shí),可根據(jù)接ロ實(shí)例化mock存儲(chǔ)庫(kù),去模擬實(shí)際運(yùn)行過(guò)程中的對(duì)數(shù)據(jù)的添加、修改、刪除、查詢。采用MVC的TDD的原則之ー是,每個(gè)測(cè)試應(yīng)驅(qū)動(dòng)操作方法中的ー個(gè)特定要求,測(cè)試不應(yīng)驗(yàn)證數(shù)據(jù)庫(kù)或其他組件(盡量把這些組件放在數(shù)據(jù)訪問(wèn)的単元測(cè)試和集成測(cè)試中進(jìn)行測(cè)試)。本發(fā)明的有益效果是
1、執(zhí)行單元測(cè)試時(shí),不需要真實(shí)的數(shù)據(jù)庫(kù)服務(wù)器;
2、編輯和刪除數(shù)據(jù)的單元測(cè)試,不需要在執(zhí)行每一輪單元測(cè)試時(shí),準(zhǔn)備干凈的數(shù)據(jù)庫(kù)環(huán)境;
3、為單元測(cè)試提供了替換點(diǎn),可以輕松地測(cè)試業(yè)務(wù)邏輯而無(wú)需數(shù)據(jù)庫(kù)和其他外部依賴項(xiàng)。
圖I為本發(fā)明的流程圖。
具體實(shí)施例方式下面將參考附圖并結(jié)合實(shí)施例,來(lái)詳細(xì)說(shuō)明本發(fā)明。參見(jiàn)圖I所示,ー種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,包括以下步驟 步驟I)添加存儲(chǔ)庫(kù)
使用具有MVC和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)的存儲(chǔ)庫(kù)模式,需要測(cè)試人員為數(shù)據(jù)訪問(wèn)類創(chuàng)建接ロ。對(duì)控制器方法進(jìn)行單元測(cè)試吋,可根據(jù)接ロ實(shí)例化mock存儲(chǔ)庫(kù),去模擬實(shí)際運(yùn)行過(guò)程中的對(duì)數(shù)據(jù)的添加、修改、刪除、查詢。定義ー個(gè)訪問(wèn)數(shù)據(jù)庫(kù)的接ロ
1.publicinterface 丄しontactRepository
2.{
3.void CreateNewContact(しontact contactioireatej;
4.void DeleteContact unt id);
5.Contact GetContactByID(int id);
6.IEnumerabIe<Contact> GetAllContacts();
7.int SaveChanges ();
8.}
步驟2)創(chuàng)建測(cè)試驅(qū)動(dòng),實(shí)現(xiàn)mock存儲(chǔ)庫(kù)
1.class InMemoryContactReposit ory : IContactRepository
2.{
3.private List<Contact> —db = new List<Contact> ();
4.public Exception ExceptionToThrow { get; set; }
5.public void SaveChanges(Contact contactToUpdate) {}
6.public void Add (Contact contactToAdd) {}
7.public Contact GetContactByID(int id) {} 8.public void CreateNewContact(Contact contactToCreate) {}public int SaveChanges () {}
9.public IEnumerabIe<Contact> GetAllContacts() {}
10.public void DeleteContact(int id) {}
11.I
步驟3)添加測(cè)試支持,在目標(biāo)測(cè)試類中定義兩個(gè)構(gòu)造函數(shù)
1.public HomeController() this (,new EF_ContactRepository ()) { }
2.publicHomeController(IContactRepository repository)
3.{
4.—repository = repository;
5.}
一個(gè)是無(wú)參數(shù)構(gòu)造函數(shù);另ー個(gè)構(gòu)造函數(shù)采用了 IContactRepository類型的參數(shù),該構(gòu)造函數(shù)將由單元測(cè)試傳入mock存儲(chǔ)庫(kù)。無(wú)參數(shù)構(gòu)造函數(shù)將創(chuàng)建EF_ContactRepository類的實(shí)例,當(dāng)調(diào)用控制器中的操作方法時(shí),MVC管道將調(diào)用該構(gòu)造函數(shù)。步驟4)添加測(cè)試
采用MVC的TDD的原則之ー是,每個(gè)測(cè)試應(yīng)驅(qū)動(dòng)操作方法中的ー個(gè)特定要求,測(cè)試不應(yīng)驗(yàn)證數(shù)據(jù)庫(kù)或其他組件(盡量把這些組件放在數(shù)據(jù)訪問(wèn)的単元測(cè)試和集成測(cè)試中進(jìn)行測(cè)試)。
在測(cè)試類中編寫(xiě)測(cè)試方法,調(diào)用被測(cè)試類的有參構(gòu)造函數(shù)(采用了IContactRepository 類型的參數(shù))。I.private static HomeController GetHomeControl丄er(IContactRepositoryrepository)
編寫(xiě)測(cè)試方法
1.[TestMethod]
2.public void CreateTest O 卜·}
綜上所述,采用MVC的TDD為單元測(cè)試提供了替換點(diǎn),測(cè)試人員可以輕松地測(cè)試業(yè)務(wù)邏輯,而無(wú)需數(shù)據(jù)庫(kù)和其他外部依賴項(xiàng)。上述實(shí)施例只是為了說(shuō)明本發(fā)明的技術(shù)構(gòu)思及特點(diǎn),其目的是在于讓本領(lǐng)域內(nèi)的普通技術(shù)人員能夠了解本發(fā)明的內(nèi)容并據(jù)以實(shí)施,并不能以此限制本發(fā)明的保護(hù)范圍。凡是根據(jù)本發(fā)明內(nèi)容的實(shí)質(zhì)所作出的等效的變化或修飾,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.ー種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,其特征在于,包括以下步驟 步驟I)添加存儲(chǔ)庫(kù),定義一個(gè)訪問(wèn)數(shù)據(jù)庫(kù)的接ロ ; 步驟2)創(chuàng)建測(cè)試驅(qū)動(dòng),實(shí)現(xiàn)mock存儲(chǔ)庫(kù); 步驟3)添加測(cè)試類支持,在目標(biāo)測(cè)試類中定義兩個(gè)構(gòu)造函數(shù); 第一個(gè)構(gòu)造函數(shù)是無(wú)參數(shù)構(gòu)造函數(shù),第二個(gè)構(gòu)造函數(shù)采用了 IContactRepository類型的參數(shù),所述第二個(gè)構(gòu)造函數(shù)將由單元測(cè)試傳入所述mock存儲(chǔ)庫(kù);所述第一個(gè)構(gòu)造函數(shù)將創(chuàng)建EF_ContactR印ository類的實(shí)例,當(dāng)調(diào)用控制器中的操作方法吋,MVC管道將調(diào)用所述第一個(gè)構(gòu)造函數(shù); 步驟4)添加測(cè)試,在所述測(cè)試類中編寫(xiě)測(cè)試方法,調(diào)用所述第二個(gè)構(gòu)造函數(shù)。
全文摘要
本發(fā)明公開(kāi)了一種在MVC中使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,使用具有MVC和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的存儲(chǔ)庫(kù)模式,需要測(cè)試人員為數(shù)據(jù)訪問(wèn)類創(chuàng)建接口;對(duì)控制器方法進(jìn)行單元測(cè)試時(shí),可根據(jù)接口實(shí)例化mock存儲(chǔ)庫(kù),去模擬實(shí)際運(yùn)行過(guò)程中的對(duì)數(shù)據(jù)的添加、修改、刪除、查詢。該發(fā)明執(zhí)行單元測(cè)試時(shí),不需要真實(shí)的數(shù)據(jù)庫(kù)服務(wù)器;編輯和刪除數(shù)據(jù)的單元測(cè)試,不需要在執(zhí)行每一輪單元測(cè)試時(shí),準(zhǔn)備干凈的數(shù)據(jù)庫(kù)環(huán)境;為單元測(cè)試提供了替換點(diǎn),可以輕松地測(cè)試業(yè)務(wù)邏輯而無(wú)需數(shù)據(jù)庫(kù)和其他外部依賴項(xiàng)。
文檔編號(hào)G06F11/36GK102693182SQ20121016471
公開(kāi)日2012年9月26日 申請(qǐng)日期2012年5月25日 優(yōu)先權(quán)日2012年5月25日
發(fā)明者張吉英, 易川, 李德逸, 董陽(yáng) 申請(qǐng)人:蘇州博遠(yuǎn)容天信息科技有限公司