2017-10-03

[Unit Test][Tips] How to break the "define" in PHP

新團隊是用PHP開發的
所以我剛到這支團隊 第一個任務就是將Unit Test的觀念帶進來

可是PHP 我不熟
沒關係 Unit Test 的觀念都大同小異

" 偷 天 換 日 "

但我今天卡到一個難關
我們的 Production Code 很喜歡使用 static function 及 define
因此在這種情況下 怎麼讓 Production Code 變成 testable呢?

Production Code

原始判斷用了 define
而且在PHP中 define 還不能被替換掉
試了 Mock 等方法都沒效
而且 static function 找不到地方Dependency Injection
所以嘗試在參數上動手腳
希望在不影響原有行為下 能夠讓 Production Code 可以被測試


我在參數列當中加了一個參數 $fromOutside
預設值是null
意思是如果 caller 沒有給這個參數 預設是 null
如果是 null 我就assign define "DEFINESAMPLE" 給它

See ~

是不是跟 Production Code 的行為一致了


那 testing code 怎麼寫呢?

我們想怎麼換就怎麼換了

OK Let's write the unit test in PHP !
GO GO GO !


0 意見: