2016-04-20 78 views
2

我試圖圍繞測試進行測試,並且我知道它比我想象的要容易。我的猜測是,我會不可避免地遇到麻煩,因爲我先寫代碼,現在只是做測試,而不是有測試驅動的開發過程。不返回任何東西的測試方法

我的問題是關於包含文件的功能。他們不回報任何東西,但他們爲整個劇本做了些什麼。

比方說,我有一個類,包括文件:

<?php 

class Includer { 
    public function __construct() { 
     $this->include_file("/var/www/index.html"); 
    } 

    public function check_file_validity($file = "") { 
     // Check to see if the file exists 
     return true; // if exists 
    } 

    public function include_file($file = "") { 
     if ($this->check_file_validity($file)) { 
      include $file; 
     }   
    } 
} 

我可以寫一個測試,以斷定該文件存在(check_file_validity),這將是直線前進。

但是,根據是否包含文件,返回include_file函數的布爾值是否可以接受?這不是一個多餘的測試,因爲運行check_file_validity函數時基本上會發生同樣的情況?

我應該注意,包含該文件的信息來自URL,因此這裏沒有文件將被硬編碼在測試之外(除非我嘲笑$_GET參數)。

回答

1

通常,我認爲假設PHP函數可以正常工作是安全的,並且不需要再次測試它們。相反,如果您想測試使用像include這樣的函數的代碼,那麼將其包裝起來可能是一個好主意。因此,代碼看起來是這樣的:

<?php 

class Includer { 
    public function __construct() { 
     $this->include_file("/var/www/index.html"); 
    } 

    public function check_file_validity($file = "") { 
     // Check to see if the file exists 
     return true; // if exists 
    } 

    public function include_file_if_exists($file = "") { 
     if ($this->check_file_validity($file)) { 
      $this->include_file($file); 
     }   
    } 

    public function include_file($file = "") { 
     include $file; 
    } 
} 

要測試include_file_if_exists(),你會簡單地嘲笑你的類,這樣你就可以檢查是否include_file()被稱爲與否,如果它得到正確的說法。

至於include_file()本身,沒有必要再測試它,因爲它只包裝include

+0

您是否會說會膨脹代碼,從而導致長期追蹤問題變得更加困難,因爲增加了功能?你的回答確實有助於我理解該怎麼做,所以非常感謝你。 – helllomatt

+0

這取決於。通常你想把這些類型的功能組合在一起,所以不用添加'include'方法,你可能想要考慮一個可重用的加載器對象。或者如果你想解析文本文件,你可以創建一個'Reader'類並使用它來代替原始的PHP函數。但是你不必測試一切。在你的情況下,只需測試'check_file_validity'就可以了。但是我想告訴你,如果邏輯變得更加複雜,如何仍然能夠使用這些函數來測試方法。 –