iT邦幫忙

0

phpunit 測試覆蓋率的問題???

各位大神好~ 小魯有問題想問QQ
小魯使用PHPunit 來寫測試 Code如下
跑起來沒有問題 但是測試覆蓋沒有辦法覆蓋到目標Class的建構式
想請問要如何讓測試覆蓋可以覆蓋到目標的建構式呢?

code如下..

class GetTokenAPITest extends TestCase{
 
    function __construct(){
        parent::__construct();
        $this->api = new GetTokenAPI();
    }
    //測試method GET
    function testGETMethod(){
       code.....
    }
      //測試錯誤的Action
    function testWrongAction(){
        code.....
    }

測試報表
https://ithelp.ithome.com.tw/upload/images/20190129/20111526sOWXARbEIv.png](http://)

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2019-01-29 18:55:32 檢舉
照理說這樣就會執行到了:
new GetTokenAPI();
所以應該是有的嗎= =?
還是我用的方法不對!!!?
weiclin iT邦高手 4 級 ‧ 2019-01-30 08:30:35 檢舉
你開一個新專案, 寫一個單純一點的類別然後測試看看 new 會不會執行到 construct 吧, 至少我這邊測試是會有覆蓋到的
fillano iT邦超人 1 級 ‧ 2019-01-30 09:20:11 檢舉
不過通常建立fixture是在setup / teardown中做的,不是在測試類別的constructor。

參考:
https://phpunit.readthedocs.io/en/7.4/fixtures.html
weiclin iT邦高手 4 級 ‧ 2019-01-30 09:32:56 檢舉
在 setup 裡面建立是有算進覆蓋率的
好的 我試試看改new在setup裡面會不會有計算到
fillano 大
的確是改new 在setup 裡就有算到覆蓋率了原來是我用的方法不對
快幫我回答 我要給你最佳解XD
weiclin 大 也感謝你替我想辦法 感恩~!!
weiclin iT邦高手 4 級 ‧ 2019-01-30 10:18:59 檢舉
那個..不在 setup 裡也應該要有的....
fillano iT邦超人 1 級 ‧ 2019-01-30 10:28:47 檢舉
阿,我不是在說覆蓋率,而是針對樓主在測試類別的constructor中實例化測試對象這件事,抱歉Orz

大部分測試的對象都有狀態,如果放在constructor,這樣每個測試都共用同一個實體化的物件,或者說是上一個測試用到的測試對象又拿到下一個測試使用,可能會有問題。setup在每個測試前都會跑一次,teardown在每個測試後都會跑一次,就是用來處理這個狀況。所以除非確定測試對象完全沒有狀態,否則就應該放在setup / teardown來實例化。
weiclin iT邦高手 4 級 ‧ 2019-01-30 10:38:23 檢舉
所以問題也可能是出在這裡了.. TestCase 建構子裡面的東西算不算在覆蓋率裡, 我還真沒試過
fillano 大 我的建構式只是用來塞值給變數 其實也可以直接在宣告變數的時候塞進去 該變數的內容在後續的測試也會被驗證 這樣不知道有沒有符合您說的 "完全沒有狀態"呢?
不過如果寫在建構式裡算不到覆蓋率 我還是乖乖寫在setup裡好了
滿滿的綠條看起來心情很舒爽@@
weiclin iT邦高手 4 級 ‧ 2019-01-30 11:18:54 檢舉
建議你翻一下書, 測試的 FIRST 原則, 看看那個 "I", 然後看看你這兩種寫法哪種才符合規則
weiclin iT邦高手 4 級 ‧ 2019-01-30 11:19:14 檢舉
因為那不只是覆蓋率的問題
weiclin 大 感謝你的建議 小魯來研究看看

尚未有邦友回答

立即登入回答