接續上篇 Hello ASP.NET 1.0,已可以順利建立與運行 ASP.NET Core Web Application ( .NET Core )。
而依據目前尚有不少東西處於剛釋出 or 正在開發的情況下,若想要跟往常一樣,將專案加入單元測試,是否可行呢 ?
以下就是自己的嘗試筆記。
前言
若前往 ASP.NET Core MVC GitHub 查閱相關 Test Code,會發現採用 xUnit.net 元件。而自己較為熟悉的 Test Framework 是 MSTest。
上個月底的 MSDN Blog 看到一篇文章:Announcing MSTest Framework support for .NET Core RC2 / ASP.NET Core RC2
介紹 .NET Core RC2 階段 MSTest 開發與支援的內容。而 .NET Core RTM 後,目前 MSTest 尚為 Preview 階段,依然值得一試,故來確認其可行性。
實作
首先依據 MSDN Blog 文章上提到 MSTest 於 .NET Core 的 Framework,可至 NuGet-MSTestFramework 查閱:
Install-Package MSTest.TestFramework -Pre
Install-Package dotnet-test-mstest -Pre
在測試專案中加入上述兩套件即可。相關操作如下:
接續前一篇所建立的專案:DotNetCoreWebApp ( WebApplication ) 並新增專案 DotNetCoreWebApp.Test ( Class Library ),如下圖:
DotNetCoreWebApp:如同前一篇介紹,因相關配置 ( project.json ) 都無異動,保持原始專案結構,就不多介紹。
DotNetCoreWebApp.Test:因目前無採 .NET Core 的測試專案範本,故使用 Class Library 的專案為基底。
測試專案配置如下:
{
"version": "1.0.0-*",
"testRunner": "mstest",
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"MSTest.TestFramework": "1.0.0-preview",
"dotnet-test-mstest": "1.0.1-preview",
"DotNetCoreWebApp": "1.0.0-*"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dnxcore50",
"portable-net45+win8"
]
}
}
}
回到 DotNetCoreWebApp HomeController,新增 GetData Action,直接回傳 "Test" Json 字串。
using Microsoft.AspNetCore.Mvc;
namespace DotNetCoreWebApp.Controllers
{
public class HomeController : Controller
{
//// 省略
public IActionResult GetData()
{
var result = "Test";
return Json(result);
}
}
}
而測試專案新增 HomeControllerTest,撰寫方式與往常相同,並無差別:
using DotNetCoreWebApp.Controllers;
using Microsoft.AspNetCore.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace DotNetCoreWebApp.Test
{
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Verify_Home_GetData_JsonResult_Equal_Test_String()
{
//// Arrage
var homeController = new HomeController();
var expected = "Test";
//// Act
var actual = homeController.GetData() as JsonResult;
//// Assert
Assert.IsNotNull(actual);
Assert.AreEqual(expected, actual.Value);
}
}
}
執行測試通過:
執行測試失敗:
以上,為自己嚐鮮的一篇記錄。
資源
● MSDN Blog - Announcing MSTest Framework support for .NET Core RC2 / ASP.NET Core RC2
● NuGet - MSTest.TestFramework
● NuGet - dotnet-test-mstest
● Unit test ASP.NET Core Applications with MSTest