情境
如果要產生一個亂數時很常會想到 Guid 方法解決,在 C# 使用 Guid 的方式相當簡單僅要透過 Guid.NewGuid 靜態方法產生一組 Guid 使用,在目前公司很常看到使用 Guid 作為識別碼,今天在重構舊代碼時忽然想到如果遇到 Guid 該如何進行加上單元測試,以下就目前想到的解法進行測試與說明,如果各位高手們有更好的方法歡迎高抬貴手一起討論研究。
解決方案
寫個簡單的 Sample 方法讓整個情境可以更容易了解,舉個例子來說有個 Generator 類別提供 NewGuidToken 方法產生 Guid 資料並回傳給呼叫端,Sample Code 如下
- public static class Generator
- {
- public static Guid NewGuidToken()
- {
- return Guid.NewGuid();
- }
- }
第一時間讓我想到之前上 TDD 遇到測試今天是不是聖誕節案例時很像,但特別為了 Guid 寫一個介面讓使用的 class 實做,在透過建構子注入就可以斷開其依賴關係,但這 case 算是很單純個人覺得沒必要做這麼複雜的工,忽然想到在 C# 中每個資料型別物件大多都提供 TryParse 進行轉換,且該方法回傳結果為 true / fales bool型別,與 UnitTest 中的 Assert 搭配使用相當方便,單元測試 Sample Code 如下
- [TestFixture()]
- public class GeneratorTests
- {
- [Test()]
- public void Input_NewGuid_Return_True()
- {
- // act
- var input = Generator.NewGuidToken();
-
- // assert
- Assert.IsTrue(Guid.TryParse(input.ToString(), out Guid output));
- }
- [TestCase("Teset123")]
- [TestCase("Marcus")]
- public void Input_FakeGuid_Return_True(string input)
- {
- Assert.IsFalse(Guid.TryParse(input, out Guid output));
- }
- }
當你的情境只需要驗證產生出來的是否符合 Guid 時,就可以直接透過 Assert.IsTrue(your guid string) 來確認 Guid 格式是否正確 (第 11 行 );反之,如果要驗證格不符合時透過不是時用 Guid.TryParse + Assert.IsFalse 即可 ( 第17行 ),相當容易上手且閱讀性很高。
接著在來確認單元測試後的結果,其單元測試結果都執行正常
三份測試都通過且驗證無誤,綠燈 Pass 測試成功 !!
Summary
以上就是針對 Guid 型別寫單元測試的方法,也是小弟的矬見,如果各位大大有更好的方式歡迎一起討論跟溝通 :)
Related Posts:
[UnitTest] ASP.NET Core 2.2 測試專案中的版本衝突 問題
這幾天專案某項功能接近尾聲,要替其核心 ASP.NET Core 專案加上單元測試專案,加入後按下建置發現跳出 Error 錯誤訊息 "CS1705 Assembly 'xxxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.Extensions.Logging.Abstractions, Version=2.… Read More
[UnitTest] Refactoring 好幫手 - Refactoring.Guru前言
過去還在菜鳥時期很常遇過一種情境,就是當看到一段既有的代碼或是專案裡的 Code,看起來有些怪異的地方但又說不出來怪的點是哪一點,想改又不知道從何下手的情境,如果遇到這問題想要得到解答的話,可以試試看到 refactoring.guru,這網站透過漫畫的方式介紹兩項開發者在 Coding 時的必修課程,重構 ( Refacting ) 與設計模式 ( Design Pattern );以下就針對這兩項目做簡單說明
Re… Read More
[UnitTest] Visual Studio 2017 新增單元測試時沒有 NUnit 選項 ?前言
新筆電總是讓人充滿驚喜,在使用上除了要重新安裝常用的開發工具外,像是 Visual Studio & SQL Server..等必須工具,還有些常用的套件與小工具也要一併安裝,NUnit 是蠻常用的 Test Framwroek 之一,在寫測試時在要測試的 method 下按下右鍵 create Unit Tests,選擇要使用測試的 Test Framework 即可,在測試專案中預設只有 MSTest 選項,如果需要 NUnit… Read More
[UnitTest] 如何測試目標方法中 Guid 型別的代碼 ?情境
如果要產生一個亂數時很常會想到 Guid 方法解決,在 C# 使用 Guid 的方式相當簡單僅要透過 Guid.NewGuid 靜態方法產生一組 Guid 使用,在目前公司很常看到使用 Guid 作為識別碼,今天在重構舊代碼時忽然想到如果遇到 Guid 該如何進行加上單元測試,以下就目前想到的解法進行測試與說明,如果各位高手們有更好的方法歡迎高抬貴手一起討論研究。
解決方案
寫個簡單的 Sa… Read More
[UnitTest] Visual Studio 2017 按右鍵無法建立單元測試 ? 問題
最近心血來潮使用家中舊電腦小白寫 Code,在練習測試中發現竟然有點怪異,在要測試的 method 按下右鍵沒有 建立單元測試 Create Unit Test 選項,但相同練習專案拿到公司筆電就是正常的,經比對後發現舊筆電 Visual Studio 版本少安裝測試功能,以下簡單紀錄解決問題的過程
解決方案
在 Visual Studio 2017 早期版本這是已知問題,有開發者在 vs community 回報給開… Read More
0 意見:
張貼留言