Dotnet test 會以隱含的方式執行 dotnet build,所以不用另外再執行建置去檢查。這部分是透過 git 去檢查兩者產出物有何不同所證明的。
在使用 .NET Core CLI 前就有一個疑惑,到底執行測試前,有沒有需要先執行建置,兩者有什麼相依關係嗎?或是執行測試就隱含著執行建置的行為?這一直是我心中的疑惑。
趁著改用 .NET Core CLI,我們來透過 Git 來協助我們確認這件事。以昨天的專案為環境進行研究。
# Location: ~/dotnet-sln
$ dotnet test
Test run for /Users/ironman/dotnet-sln/WebProj.Tests/bin/Debug/netcoreapp2.2/WebProj.Tests.dll(.NETCoreApp,Version=v2.2)
Microsoft (R) Test Execution Command Line Tool Version 16.2.0-preview-20190606-02
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 1.2430 Seconds
$ git add ./
$ git commit -m "Snapshot all changed by dotnet test"
$ git build
Microsoft (R) Build Engine version 16.2.32702+c4012a063 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 30.3 ms for /Users/ironman/dotnet-sln/WebProj.Tests/WebProj.Tests.csproj.
Restore completed in 33.59 ms for /Users/ironman/dotnet-sln/WebProj/WebProj.csproj.
WebProj -> /Users/ironman/dotnet-sln/WebProj/bin/Debug/netcoreapp2.2/WebProj.dll
WebProj -> /Users/ironman/dotnet-sln/WebProj/bin/Debug/netcoreapp2.2/WebProj.Views.dll
WebProj.Tests -> /Users/ironman/dotnet-sln/WebProj.Tests/bin/Debug/netcoreapp2.2/WebProj.Tests.dll
Build succeeded.
0 Warning(s)
0 Error(s)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: WebProj.Tests/obj/Debug/netcoreapp2.2/WebProj.Tests.csprojAssemblyReference.cache
透過這樣的實驗,我們發現執行完 dotnet test
後產出的檔案,和執行 dotnet build
後產出的檔案,只差在一個 cache 檔案。而其他主要的產出物,例如以 .dll
為副檔名的檔案是一樣的。所以幾乎可以認為執行測試就隱含著執行建置的行為。