天天看點

學習MVC之租房網站(四)-實作Service層并進行單元測試

在上一篇<學習MVC之租房網站(三)-編寫Eneity類并建立資料庫>中,記錄了編寫Eneity類并采用CodeFirst的方式建立資料庫的過程,接下來就到了Service層的實作了,并且在開始後續工作前,首先進行充分的單元測試。

長久以來,一直為寫出很多bug而苦惱,這兒用過單元測試後,驚喜地發現,這不正是保證代碼品質的好方法嘛,雖然會耗費額外的時間,但決定以後要把單元測試運用到工作和學習的實踐中。

一、實作Service層

1. 為了減少子產品、層之間的耦合,在Service層上面增加了IService接口層,一張表對應一個Service類,并對應實作一組IService接口的方法。比如關于背景管理者表T_AdminUser的對應關系為:

T_AdminUser表->AdminUserService->IAdminUserService

IAdminUserService接口中定義的方法有:

學習MVC之租房網站(四)-實作Service層并進行單元測試

然後在AdminUserService類中會一一實作這些方法

2. 配置AutoFac

Service類都在ZSZ.Service項目中,這些Service類都對應實作了ZSZ.IService中的接口。然後會配置使用IOC容器AutoFac,在Global.asax中添加代碼:

學習MVC之租房網站(四)-實作Service層并進行單元測試

關于IOC以及AutoFac非常不了解,先用起來,慢慢了解吧,大概的作用就是配置了ZSZ.Service為要使用的Service程式集後,在Controller中直接調用IService就可以了,這樣Controller與Service層就解耦了,解耦當然是好事情。

為了有選擇性地讓AutoFac管理Service,利用一個空的接口IServiceSupport做辨別,隻有繼承了IServiceSupport接口的才會被注入。但對于這兒的IsAssignableFrom需要學學,順便可以給公衆号湊個數,嘿~

二、單元測試

Service都實作後,開始單元測試,VS自帶了單元測試的項目模闆,并在命名空間Microsoft.VisualStudio.TestTools.UnitTesting下提供了一系列标簽,比如[TestClass]、[TestMethod]等,我隻用過了這兩個。需要對單元測試進行系統的學習,但在最近的實踐中,發現了至少是适合自己的單元測試寫法,即一個被測試類對應一個單元測試類,一個方法會有多個測試案例,這些Case各編寫一個方法,這樣便于在VS給出測試結果後快速定位到錯誤的代碼。但每個Case一個方法會造成方法太多,于是用#region包裹一個被測方法相關的所有Case對應的方法。

如對于AdminUserService. GetAll(long? cityId)的測試,想到有如下三個測試案例:

學習MVC之租房網站(四)-實作Service層并進行單元測試

最後,有一種特殊的Assert,Assert.ThrowsException,用于檢查是否傳回指定的異常類型,寫法為:

Assert.ThrowsException<ArgumentException>(() => atService.GetAttachments(2));

注:

課程内容來自如鵬網(www.rupeng.com),專注于大學生就業的線上教育平台;

ASP.NET MVC課程 http://www.rupeng.com/News/9/640.shtml

繼續閱讀