目的
進行單元測試時,可以隔絕依賴的項目。
建立新專案
選擇ASP.NET Core Web API專案範本,並執行下一步
設定新的專案
命名你的專案名稱,並選擇專案要存放的位置。
其他資訊
直接進行下一步
建立新的類別庫
進行命名時通常會與要測試的專案同名並加上結尾.Tests
,以此範例就會變成MoqExample.Tests
NuGet加入套件
針對xUnitExample.Tests加入相關套件
- xunit
- xunit.runner.visualstudio
- Microsoft.NET.Test.Sdk
- coverlet.collector
- Moq
針對MoqExample.Tests類別庫加入參考
引用要測試的專案,才能將測試與實際專案切分開來
新增WeatherForecastControllerTests.cs類別檔
刪除預設的類別檔(Class1.cs),並在MoqExample.Tests專案新增對應資料夾,與類別檔並加結尾Tests
。
編輯WeatherForecastControllerTests.cs類別檔
測試都會分三個階段
- Arrange:準備階段,包含初始化相關資料
- Act:執行測試方法後所取得的結果
- Assert:驗證Act取得的結果是否符合預期結果 這次要測試的是controller,有注入Ilogger,如何將Ilogger隔開的關鍵就是使用Moq這個套件
using Microsoft.Extensions.Logging;
using Moq;
using MoqExample.Controllers;
using Xunit;
namespace MoqExample.Tests.Controllers {
public class WeatherForecastControllerTests {
[Fact]
public void Get() {
//Arrange
//透過mock將外界的介面包起來
var MockLogger = new Mock<ILogger<WeatherForecastController>>();
//當成物件傳入controller,代替實際的介面
var Controllers = new WeatherForecastController(MockLogger.Object);
//Act
//執行要測試的函式
var Results = Controllers.Get();
//Assert
//確認結果不為null
Assert.NotNull(Results);
//確認結果數量等於5
Assert.Equal(5, Results.Count());
}
}
}
執行結果
點選測試>執行所有測試
下方視窗就會顯示成功或失敗