1. 單元測試
最小單位、測試範圍小、測試速度快
- 越是符合SOLID的架構則Unit Test越好寫
1.1. 舉例
最小單位在實際的角度來說,不同場點嚴謹有不同做法。
舉例來說,以class為最小單位,那我們就針對每個method去做測試,看class method 是否符合他的文件(method comment)所說的功能
2. 整合測試
測試範圍介於單元測試與E2E測試之間
測試速度慢
多個單元互相整合再一起做測試。主要針對不同模組互動下去做測試
需要準備更完整的模擬環境來完成測試工作
可以針對必要的咚咚去做整合測試即可
2.1. 舉例
資料庫連接的部分是一個模組
而讀取資料庫的資料進來說,做一些商業邏輯的部分又是另一個模組
我們想針對這兩個模組的互動去做測試,看看他們的互動後會不會產生各種奇琶結果。
測試案例成為整合測試的關鍵點是:測試案例是否包含與外部環境交互的邏輯,如時間、Session、Cookie、資料庫,硬體,網路等等不受程式控制的因素。
簡單來說,若測試案例無與外部環境交互的邏輯,則可以將測試案例視為單元測試:
反之,若測試案例中包含與外部環境交互的邏輯,那麼這個測試案例就是一個整合測試:
3. 端對端測試
測試範圍大
以USER的角度去做測試,通常需要模擬最完整的環境去做測試
對選各種我寫的功能,看看這些功能是不是做了他們應該要做的事情
也就是針對User Interface使用者介面去做測試
目前的End to End 的framework很多
比較流行的有https://www.selenium.dev/
4. 寫測試須知
- 不是所有的程式都可以測試
- 實際寫過測試,才知道之前寫的code能不能被測試
5. 如何命名測試function名稱
- 要被測試的方法名稱
- 測試的情境(input)
- 預期行為(output)
6. 測試function的內容架構
- 準備
- 執行
- 驗證
7. 什麼是好的測試
8. 應該避免的測試寫法
9. 再提升一點
- 同一個測試,用不同參數組合測試-參數化測試
- 每個assert都要執行到(parameterized,self.subTest())
- 搭配面對面的code review勝過100% 覆蓋率
9.1. 參數化測試案例
10. 軟體工具
市面上現有的 E2E 框架非常多,知名的有 Protractor、CasperJS、Nightwatch.js、Testcafe、Cypress 等等。
11. 問題
11.1. 何謂最小單位
11.2. 撰寫測試程式的價值
11.3. 誰該學單元測試?
12. 參考連結
- 單元測試(unit test)的心法
- 【 .NET 測試入門】#1 什麼是單元測試 & 整合測試 & 端對端測試? | HiSKIO 程式語言線上教學
- 一次搞懂單元測試、整合測試、端對端測試之間的差異
- 探討單元測試和整合測試的涵蓋範圍
- 軟體上線就等於今晚不用回家? 學”單元測試”可能有辦法挽救您的婚姻
12.1. 未看
http://www.tw511.com/24/276/9932.html
https://www.cnblogs.com/Neeo/articles/11809457.html
https://jchu.cc/2018/08/16-test.html
[Day 01] 自動化測試最簡單也最困難