Skip to content

【Cs】NUnit & .NET Framework Initialization

文前言

紀錄今日辛酸史
差點放棄改去用 MSTest...

主文

心血來潮想把某 dll 拿來丟 Program.cs 測試區且測試是真的會寫入 db 的部分改用單元測試取代。

摸網路查到單元測試框架:MSTest、NUnit、xUnit

原先打算用熟悉的 xUnit,但發現他沒有支援 Framework,因此轉戰其他兩個平台。

又摸到 為什麼程式需要單元測試? - 實作篇:叡揚部落格 推薦 NUnit 且有給範例,因此決定用 NUnit。

殊不知這是悲劇的開始...

總而言之一開始

照官方要求裝
NUnit Test Generator VS2022 - Visual Studio Marketplace

版本悲劇,但其實也還好

一開始是用範本加的 NUnit3。

實際上 NUnit 選擇目標框架是沒有 Framework 的,但有摸到改動的捷徑:

How can I choose .NET Framework when create a NUnit Test Project with Visual Studio 2022? - Stack Overflow

然而不管怎麼嘗試都不太對勁,會一直報比如

  • C# 7.3 (就是目前用的版本) 不可用 null => 好解決,把 csproj 內的 Nullable tag 砍掉就好
  • 比較麻煩的是會不停的在 obj 資料夾內跑出全域用 using,但 7.3 沒有支援全域 using...

最後摸到官方文件
Adapter Installation | NUnit Docs

找出 cli 安裝才成功。

然後一樣要用前面的捷徑調整,且不會報奇怪的東西。

追記

範本的部份感謝社群陪伴討論者啾大協助:

使用 cli: dotnet new install NUnit3.DotNetNew.Template

略忘記的甚麼原因造成的問題

因為嘗試太久了有些東西記憶不深...可能得等哪天又遇到才能補上了。

執行單元測試的時候報:

System.BadImageFormatException : Could not load file or assembly 'SYS\SYS.Tests\bin\Debug\netX\SYS.exe'. Format of the executable (.exe) or library (.dll) is invalid.

小問題

執行單元測試的時候報:

Assert.Equals should not be used. Use Assert.AreEqual instead.

這問題是掛在版本問題,降版本就好。

驗證

照著此篇
[UnitTest] NUnit 入門教學 ~ m@rcus 學習筆記
做到最後通過,就成功了!

接下來就是自己撰寫時刻了。

其他

一個有點傻的註記:
輸出類型 dll 不用切成主控台應用程式才能跑單元測試,保留是 dll 就可以了。

UPDATE LOG

115. 04/22 開篇