最新內容已更新至 Blog: 使用 CI 進行自動化測試
吉米
: 寫好了單元測試,也提交到版控了,但是 CI Server 怎麼沒有進行測試的動作。
Eric
: 對啊,所以需要額外進行設定,讓 CI Server 知道要進行測試。
吉米
: 嗯嗯。
Eric
: 那我們開始吧!
在開始之前,先建立一個名稱為 Calculate.Tests 的.net core unit test 專案,特別注意,使用的測試工具是 MSTest。
[TestMethod]
public void Plus_1_plus_1_equ_2()
{
CalculateTools.Calculate calc = new CalculateTools.Calculate();
int expected= 2;
int actual = calc.Plus(1, 1);
Assert.AreEqual(expected, actual);
}
由於使用 MSTest 做為測試工具,而 MSTest 為 dotnet 的內含工具,只要在 .travis.yml 增加一行指令,就可以進行測試了。
script:
- dotnet test Calculate.Tests/Calculate.Tests.csproj
從 Travis CI 的 log 中,就可以看到 Travis CI 真的有執行測試動作。
但假若使用 NUnit 或 xUnit 等測試工具,就需要額外設定,讓 Travis CI 知道有使用外部套件。下面是 Travis CI 官方說明文件的 yml 範例。
language: csharp
solution: solution-name.sln
install:
- nuget restore solution-name.sln
- nuget install xunit.runners -Version 1.9.2 -OutputDirectory testrunner
script:
- xbuild /p:Configuration=Release solution-name.sln
- mono ./testrunner/xunit.runners.1.9.2/tools/xunit.console.clr4.exe ./MyProject.Tests/bin/Release/MyProject.Tests.dll
對於自家的專案,Azure DevOps 的支援性就更高了。無需額外設定,Azure Pipleline 在建置時,發現有測試專案,就會自動進行測試。
除了單元測試以外,還有其他的測試計劃想加入測試,可以選擇 Test Plans
,不過這部份不是此次要說明的重點。筆者就避開不多加著墨。
吉米
: 在完成測試部份旳設定後,感覺又多了一層保障。
Eric
: 是啊,在 CI Server 進行測試,可以確實每一個提交者的程式,都是通過測試的。
吉米
: 也就是,只有要人沒通過測試,就把變更後的程式提交上來,立馬就會被找抓包了。
Eric
: 哈哈哈,要這樣說也可以。
<<待續>>