概述使用單元測試架構,Nunit。包括對controller的測試,以及moq架構的使用。
詳解1,資料庫層Service的單元測試
引入:using NUnit.Framework;
代碼 [TestFixture]
public class SystemConfigServiceTest
{
[Test]
public void GetByIdTest()
{
SystemConfig configExcept = new SystemConfig();
configExcept.PkId = 78;
SystemConfig configActual = new SystemConfigService().GetById(78);
Assert.AreEqual(configExcept.PkId, configActual.PkId,"插敘編號為78的,如果測試不通過,請檢查");
}
}
類的特性標記為 TestFixture,要測試的方法特性標記為:Test,初始化測試對象,出入參數,判斷傳回值與你預期的值的比較。
這種測試是比較簡單的單元測試。
2,Controller的單元測試
Moq 的介紹比較多http://www.cnblogs.com/haoliansheng/archive/2010/04/27/1721816.html
代碼 [Test]
public void IndexFirstTest()
{
SystemConfigController controller = new SystemConfigController();
var httpContext = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
NameValueCollection queryString = new NameValueCollection();
queryString.Add("currentIndex", "1");
request.Setup(r => r.QueryString).Returns(queryString);
httpContext.Setup(ht => ht.Request).Returns(request.Object);
ControllerContext controllerContext = new ControllerContext();
controllerContext.HttpContext = httpContext.Object;
controller.ControllerContext = controllerContext;
//當前為19條記錄,總共有4頁
//第一頁為5條記錄
//Act
ViewResult result1 = controller.Index(1, null) as ViewResult;
//Assert
ViewDataDictionary viewData1 = result1.ViewData;
List<SystemConfig> model1 = viewData1.Model as List<SystemConfig>;
//Assert.AreEqual(1, viewData1["CurrendIndex"],"單元測試的當前頁為 ,第一頁");
Assert.AreEqual(5, model1.Count, "第一頁的長度應該為5,錯誤有可能是沒有資料");
}
一個測試方法,
var httpContext = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
初始化兩個對象,moq其實就是類比兩個對象。用他們來進行內容相關的操作。
request.Setup(r => r.QueryString).Returns(queryString);初始化的過程
//第一頁為5條記錄
//Act
ViewResult result1 = controller.Index(1, null) as ViewResult;
然後controller直接執行方法就可以了,在判斷執行後的結果與預期的。
代碼 [Test]
public void Index0Test()
{
SystemConfigController controller = new SystemConfigController();
var httpContext = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
NameValueCollection queryString = new NameValueCollection();
queryString.Add("currentIndex", "0");
request.Setup(r => r.QueryString).Returns(queryString);
httpContext.Setup(ht => ht.Request).Returns(request.Object);
ControllerContext controllerContext = new ControllerContext();
controllerContext.HttpContext = httpContext.Object;
controller.ControllerContext = controllerContext;
//第0頁五條資料
ViewResult result3 = controller.Index(0, null) as ViewResult;
ViewDataDictionary viewData3 = result3.ViewData;
List<SystemConfig> model3 = viewData3.Model as List<SystemConfig>;
//Assert.AreEqual(0, viewData3["CurrendIndex"]);
Assert.AreEqual(5, model3.Count);
}
技術要點
controller測試,moq架構的使用。