爭什麼!摻在一起做整合測試啊!
廣義的說,當測試有包含多個單元時,就算是整合測試了。即使單元測試完整,各單元功能也正常,但組合在一起時,通常還是會發生許多莫名的問題。這時先不要想哪個單元沒寫好,而是先摻在一起做整合測試比較好
整合測試的目的是為了確保各單元間互動正常,各單元正常不表示組合起來會如我們所預期的。這道理在很多地方都適用,最常見的,一位知名的前端高手與一位知名後端高手合作,通常一開始也會不如預期,會需要後續整合。
物件的整合測試
很多情況都可以稱之為整合測試,首先我們先做物件的整合測試。昨天已經有寫好 Number 物件了,今天來寫一個程式來用它看看:
// src/Sum.php |
新增測試的指令:
$ php vendor/bin/codecept generate:test functional Sum |
測試程式的範例:
// tests/functional/SumTest.php |
執行結果
範例程式連結:GitHub
今日回顧
單元測試完整,不代表整合會正常,仍需要整合測試來確保。有一個很好的反例,跟大家分享:
- 門 service 提供上鎖服務,測試只要能卡栓能正常上鎖,即測試通過。
- 門 service 提供開門服務,測試只要門能正常打開,即測試通過。
結果端口測試想說先 call 上鎖再 call 開門,應該門會打不開的。結果卻打開了。為什麼呢?請參考下圖:
Source: https://giphy.com/
因此,整合測試是需要測的。下次如果 API 串接遇到整合問題在爭論誰對誰錯時,相信大家就可以很有自信地跳出來說:爭什麼!摻在一起做整合測試啊!
相關連結
- Integration Testing - 維基百科