預期外狀況的測試 - Rails 開發實踐
我們對在不明原因重複訂閱的情況加入了 DuplicatedSubscription
的例外,然而這種情況是無法在驗收測試的狀況下被重現出來,因為使用者無法在正常狀況做到這件事情,在這種狀況下單元測試就非常適合。
我們對在不明原因重複訂閱的情況加入了 DuplicatedSubscription
的例外,然而這種情況是無法在驗收測試的狀況下被重現出來,因為使用者無法在正常狀況做到這件事情,在這種狀況下單元測試就非常適合。
有一些情況,並不會在規格上被描述出來,我們該去測試嗎?舉例來說,目前的實作在建立訂閱的時候,並不會檢查「重複訂閱」的狀況,雖然在介面上使用者是無法進行這樣的操作,我們應該去測試這樣的情況嗎?
最近因為公司有提供 GitHub Copilot 給我們當作工具,我也就順勢將 Copilot 在 Vim 中啟用。這幾個月體驗上跟當初釋出試用版相比,反應速度雖然有提升然而仍然沒有比自己思考的速度還快,但也有改變了開發習慣。
因為我們還沒有完善所有的邏輯,因此儲存到資料庫將狀態持久化的機制可以先不處理,接下來我們需要建構不同的「測試資料」讓訂閱狀態有不同的呈現,而不是像現在這樣只有寫死的訊息。
你有想過資料(Data)和資訊(Information)的差異嗎?在軟體開發的過程中,我們做的通常被叫做「資訊系統」然而大多數情況,我們很可能只是單純的把資料放到一個程序裡面,然後對這些資料做了一些調整,中間並沒有「資訊」的概念在裡面。
過去我在寫測試的時候經常會有「這裡該測試嗎?」的疑問,然而這個問題其實可以從另一個角度思考,那就是「這些測試組以完善規則嗎?」去想,以我們第一個 E2E Testing 的測試作為例子,雖然可以通過測試,然而實作的內容只是一些假資料,我們需要用另一條測試從其他角度去驗證,讓實作最終變成我們預期的樣子。
通過規格的分析我們準備好了 E2E Testing 的文件,以及對應的步驟實現,然而在這個狀態下是無法順利通過測試的,因此我們需要進行一些實作。在只有一條測試的狀況下,我們可以用非常簡單的方法通過這個測試。
當我們有了關鍵案例(Key Examples)後,規格已經相對的明確,如果還能夠被自動化測試的話,是不是一件更好的事情呢?我們可以利用 Cucumber 來實踐 E2E Testing(端對端測試)讓我們模擬使用者實際操作來驗證規格的完善。
最近工作上以及私下跟朋友討論時,剛好都遇到了 Null
(不存在)類型的處理,通常我不會特別去在意這件事情,然而近年讀了一些關於 Null
的文章後(如:The worst mistake of computer science)對於這件事情的看法有不少改觀。