使用 .NET Core SDK 建立 Unit Test

雖然我們可以使用 console app 來測試 class library,但比較好的方式是建立 unit test,搭配各種測試案例測試 class library 的結果。

Version


macOS High Sierra 10.13.3
.NET Core SDK 2.1.101

建立 Unit Test 專案


1
$ dotnet new mstest -o MyClassLib.Tests

使用 dotnet new 建立 project。

  • mstest : 建立 MSTest 類型專案
  • -o : o output,建立在 MyClassLib.Tests 目錄下

t00

  1. 輸入 dotnet new mstest -o MyClasLib.Tests 將 MSTest 類型專案建立在 MyClassLib.Tests 目錄下
  2. .NET Core SDK 開始建立專案所需的檔案
  3. 自動 restore dependency

除了 MSTest,.NET Core SDK 預設還支援 xUnit,若想使用 NUnit,可到 Available templates for dotnet new 下載 NUnit project template

使用 VS Code 開啟專案


1
$ code MyClassLib.Tests

使用 code 執行 VS Code,後面接開啟目錄名稱。

t00

  • 使用 VS Code 開啟 MyClassLib.Tests

新增 Project Reference


1
~/MyProject $ dotnet add reference ../MyClassLib/MyClassLib.csproj

因為 MyClassLib.Tests 需要使用 MyClassLib,所以使用 dotnet add reference 新增 project reference。

t00

  1. 輸入 dotnet add reference ../MyClassLib/MyClassLib.csprojMyClassLib project 加入 reference
  2. 觀察 MyConsole.csproj
  3. MyClassLib.csproj 被加入在 <ItemGroup> 下的 <ProjectReference>
  4. 其他 package 被加入在 <ItemGroup> 下的 <PackageReference>

Project reference 與 package reference 都被記錄在 csproj 中,其中 <ProjectReference> 紀錄 project reference,而 <PackageReference> 記錄 package reference

編輯 UnitTest1.cs


UnitTest1.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace MyClassLib.Tests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{

// Arrange
var target = new CalculatorService();

// Act
var actual = target.Sum(1, 1);

// Assert
var expected = 2;
Assert.AreEqual(expected, actual);
}
}
}

根據 3A原則 建立 CalculatorService 的 Unit Test。

t00

  1. 開啟 UnitTest1.cs
  2. 建立 CalculatorService 的 Unit Test

執行 Unit Test


1
~/MyProjet $ dotnet test

使用 dotnet test 執行單元測試。

t00

  1. 輸入 dotnet test 執行單元測試
  2. 測試通過,得到 綠燈

其他相關指令


1
$ dotnet remove reference *.csproj

移除 project reference。

1
$ dotnet list reference

列出所有 project reference。

Conclusion


  • .NET Core SDK 支援各種 Unit Test,包括 MSTest、xUnit 與 NUnit
  • 使用 dotnet add reference 新增 project reference
2018-03-17