[dotnet framework] 如何使用 cli 執行測試
昨天收到同事的一個 bug,使用公司 library 所提供的方法所引發的一個錯誤,這錯誤蠻基本也蠻蝦的,雖然這個 library 已經很少再改,基於保護自己的想法,還是要幫這個方法加上測試,因為這個專案的版本還是 dotnet framework 4.5.1,希望能透過 cli 的方式在 CI 的時候跑測試。
在 cli 測試的話目前有兩種做法,第一種是新版 SDK 所提供的 dotnet cli
;另一種就是 Visual Studio 的工具。
使用 VisualStudio 的工具
VS 所提供的工具其實有兩種,一個是舊的作法 mstest.exe
,另一才是 vstest.console.exe
。
不管用哪一種方法,都要先編譯專案產生 dll 後才能執行。
MSTest.exe
微軟已經不建議使用這個做法,找到安裝 VS 的目錄底下 Common7\IDE\MSTest.exe
{install folder}\Microsoft Visual Studio\{version}\{edition}\Common7\IDE\MSTest.exe
示範的指令如下
1 | MSTest.exe /testcontainer:testproject\bin\debug\testproject.dll |
更詳細的指令介紹請參考 使用 MSTest.exe 指令來進行測試 - Yowko’s Notes
VSTest.Console.exe
微軟所提供比較新的做法,官方有詳細的介紹 VSTest.Console.exe command-line options - Visual Studio (Windows) | Microsoft Learn。
最後我找到的檔案目錄和官方介紹的不一樣,大家可以都試試看。
- 官方檔案路徑
{install folder}\Microsoft Visual Studio\{version}\{edition}\common7\ide\CommonExtensions\{Platform | Microsoft}
- 我的檔案路徑
{install folder}\Microsoft Visual Studio\{version}\{edition}\Common7\IDE\Extensions\TestPlatform
示範的指令如下
1 | vstest.console.exe testproject\bin\debug\testproject.dll |
若要指定執行的環境為 x64,可以加上參數
/platform:x64
使用 dotnet cli
自從微軟推出 dotnet core 以後,也跟著推出 dotnet cli,理論上你可以使用 cli 來執行各種專案(包含 framework),但我自己測試後發現 dotnet build/msbuild 對於 framework 的編譯會有些錯誤,後面就沒細去看。
回到這篇的主軸,可以使用 dotnet test 這個指令,來針對 framework 版本的專案進行測試,但直接執行的話什麼結果都沒,應該是專案的結構導致 dotnet cli 看不懂。
1 | ❯ dotnet test |
仔細看一下官方的文件,可以針對以下幾種來執行 [<PROJECT> | <SOLUTION> | <DIRECTORY> | <DLL> | <EXE>],既然 framework 的結構讓 dotnet cli 看不懂,就跟前面一樣針對 dll 來進行測試。
1 | ❯ dotnet test testproject\bin\Debug\testproject.dll |
結論
dotnet framework 畢竟是舊時代的產物,如果要使用新時代的東西 dotnet cli,就要稍微繞路一下,但這個前提就會是 CI server 有 dotnet cli,如果沒有的話,可以直接採用 vstest.console.exe,應該會比較好處理。