這是一篇借花獻佛、拾人牙慧的文章,之前有寫過這麼一篇文章「單元測試使用 AutoFixture.AutoNSubstitute」
當時是使用了 AutoFixture.AutoNSubsititute 來減少測試類別裡相依類別的 Stub 建立步驟,用了很奇怪的方式來解決我當時的煩惱。
直到我進入到另一個團隊後,才知道可以藉由 AutoFixture.AutoData 做到更為簡單與彈性的解決方式,這篇就來簡單介紹怎麼做。
這是一篇借花獻佛、拾人牙慧的文章,之前有寫過這麼一篇文章「單元測試使用 AutoFixture.AutoNSubstitute」
當時是使用了 AutoFixture.AutoNSubsititute 來減少測試類別裡相依類別的 Stub 建立步驟,用了很奇怪的方式來解決我當時的煩惱。
直到我進入到另一個團隊後,才知道可以藉由 AutoFixture.AutoData 做到更為簡單與彈性的解決方式,這篇就來簡單介紹怎麼做。
我想很多人看到標題後都會直接想
「程式裡直接用 DateTime 難道錯了嗎?」
「DateTime 用得好好的,為什麼要改用 Microsoft.Bcl.TimeProvider ?」
「我又不必寫測試,我就是要用 DateTime!」
我也管不著各位想怎麼用、想怎麼寫程式,只是看到很多有關於交易處理的程式都是跟時間判斷有關,而且有著種種原因而沒有寫測試,就讓人覺得那些產品妥當嗎?
而且一遇到 DateTime 的處理,就會卡在不知道如何寫測試。
所以就來寫這一篇簡單介紹 Microsoft.Bcl.TimeProvider
在去年 10 月寫了這一篇文「Repository 測試使用 Testcontainers」,不過文章裡只有公開部分的程式碼類別,可能會讓有些人想跟著實做卻會遇到做不出來的狀況。
但因為實際的程式原始碼已經不在了,所以我就重做了一個新的專案,盡量還原當時的範例專案,之前文章裡的測試專案是使用 MSTest,而這個新建立的專案則是提供了 xUnit 與 MSTest 兩種測試專案,讓使用這兩種測試框架的開發人員可以參考。
一般來說建立 RabbitMQ Cluster 最快的方式就是透過 Docker 建立,看你是要直接下指令或是編寫 Docker Compose 檔案後再執行都可以,但是會遇到一個問題就是叢集環境建立完成後,還需要再進入 RabbitMQ Management 裡去逐一建立 vhost, User 等等的設定,好一點的話就是有事先匯出一份 definitions.json,這麼一來只需要匯入這個定義檔就可以完成了。
但如果是對一個 Docker 不熟悉更不用說去輸入一條條的指令和一連串步驟的新人來說,上面所說的對他們都是充滿著挑戰性,於是就將建立開發環境 RabbitMQ Cluster 的過程都寫成一個 bat 檔案,新人只要在自己電腦裡安裝好 Docker 環境後只需要執行這麼一個 bat 檔案就可以完成 RabbitMQ Cluster 的建立,裡面所有的設定也都準備好,馬上就可以應用在專案開發上。
很無厘頭的標題… 主要是看到很多開發工程師只會使用 Ctrl+C, Ctrl+V 大法來做事,其實沒有辦法發揮多大的效益,
應該還是適時地增加一些小技法來升級自己的成功關鍵,不要只會那一兩招而已。
其實這也不一定是在整合測試才會用到,一般會呼叫使用到外部 API 時的情境也一樣適用。
當要將一個物件的資料帶入 QueryString 時,每次就會覺得這個步驟很麻煩,甚至有一段時間是自己寫個方法來處理,但總覺得不是一個漂亮的解決方式,
於是就想到可以使用 Flurl 來處理,也的確是可以簡化以前那些繁瑣的建立 QueryString 的作法。
在整合測試專案裡要對 HttpClient 執行結果的 Response 內容進行驗證其實有點麻煩... 例如狀態驗證或是要對回傳資料做細部驗證的話,還需要再自己去對 Response Content 做反序列化的處理 也不用寫多一點測試案例才會覺得煩,當你寫了一個測試案例的驗證時就一定會這麼覺得, 當時同事就分享了這麼一個套件「FluentAssertions.Web」來簡化這些回傳內容的驗證。
前一篇「xUnit 完全使用 FluentDocker 建立 MongoDB 的 Docker Image 和 Docker Container」裡用了兩個步驟分別建立 docker-image 和 docker-container,而建立 docker-image 是透過執行 docker-compose.yml 的方式。
如果不想要這麼麻煩地分成兩步驟,而是想要執行一次 docker-compose 就完成 docker-image 和 docker-container 的建立,這篇文章就來簡單說明如何進行。
前一篇文章「建立測試用 Container 前先建立 Docker Image - 使用 FluentDocker」是在 xUint 測試專案裡使用了 FluentDocker 和 Testcontainers 分別建立 Docker Image 與 Docker Container,這一篇就單純地展示完全使用 FluentDocker 來完成 Docker Image 和 Docker Container 的建立。
前一篇文章說明了在進行 Repository 時使用 Testcontainer 建立測試用 MS SQL Server 容器
如果另外一個專案並非使用 MS SQL Server 而是使用 MongoDB,而且為了測試需要必須要使用自己所打包好的 Docker Image 來建立容器,
Testcontainers 是有提供 Docker Image Build 的功能,但是我卻在建立 Docker Image 時一直出現錯誤,
在無法使用 Testcontainers 解決問題的情況下,我又想起了之前一直在用的 FluentDocker,FluentDocker 有支援 Docker Compose 功能,
於是這就是這篇文章所要說明的內容