隔離框架(Isolation Framework)——以 Codeception 為例
定義:一個隔離框架是一套可用來幫助寫程式的 API,使用這套 API 來建立假物件比手刻假物件要容易得多、快得多、簡潔許多。它是一個可以在 runtime 建立和設定假物件的 library,這些假物件稱為 dynamic stub 或 dynamic mock。
之所以稱為隔離框架,是因為這些框架幫你隔離工作 unit 跟它的 dependency object。
使用隔離框架的好處是讓隔離框架幫我們生 stub 跟 mock object,省去手刻的麻煩。
動態產生假物件
動態假物件是在 runtime 才建立的 stub 或 mock object,它的建立不需要手刻假物件的 code(寫死在假 class 中)。
Codeception
可以用 Codeception Stub github 來製造假的 stub 跟 mock object。寫起來大概會長這樣:
1 | public function testFoo() |
1 | <?php |
除了 Stub::make()
之外還有 Stub::makeEmpty()
。class name 可以是 interface。要小心不要把 Stub 當作 extract and override 在寫……
可以配合 Codeception\Stub\Expected 做 mock object。如果是 mock object,Stub::make()
系列要記得傳最後一個參數 testCase,不然像 Expected::once()
會沒 verify 到。
這可以省去寫一堆 ‘’class FakeXXX’’,但是針對 API json 或 xml response 還是只能手動把這些 json 跟 xml 存下來去做假物件。