2016-03-11 75 views
1

我讀過一些人測試他們,有些人沒有。你什麼時候會測試一個getter/setter?PHPUnit排除Getters&setters

如果我想跳過單元測試的getter和setter,我該如何用PHPUnit來管理它(跳過所有getter和setter)?

回答

0

這實際上取決於你在那些設置者和獲取者中擁有什麼,但對我來說,測試它們是非常有意義的,即使它們與設置私有/受保護屬性一樣簡單。

在給定某個輸入和單元測試的情況下,您的程序具有預期/期望的行爲,以確保不存在迴歸問題。

例如,給定一個包含具體的setter/getters的類,您將被誘惑複製粘貼某些方法,您可能會忘記更改其中一個setter的屬性名稱,並以2個不同的setter結尾值:

class User 
{ 
    private $firstName; 
    private $lastName; 

    public function setFirstName($value) 
    { 
     $this->firstName = $value; 
    } 

    public function getFirstName() 
    { 
     return $this->firstName; 
    } 

    public function setLastName($value) 
    { 
     $this->firstName = $value; 
    } 

    public function getLastName() 
    { 
     return $this->lastName; 
    } 
} 

和您的測試可能會像

public function testSetLastName_validValue_successful() 
{ 
    $user = new User; 
    $value = 'Doe'; 
    $user->setLastName($value); 
    $this->assertEquals($value, $user->getLastName()); 
} 

這將立即顯示錯誤setLastName而且這也是TDD是如何幫助一個很好的例子:)

爲每個setter/getter對寫幾個非常簡單的單元測試可以爲你節省一些麻煩。

即使在使用重載時,單元測試對確保魔法設置者/獲取者的域是有用的。

至於'如何跳過所有的getter和setters'...只是不要爲他們寫測試?

+0

你用這種方法浪費時間和金錢。如果你真的想測試getter/setter,你應該編寫一些實用工具來自動化反省。 – Toilal

4

測試封裝業務邏輯的方法。一個setter通常只是一個賦值,一個getter的大部分時間只是返回對象的屬性,或者有時候是一個硬編碼常量。配對編程和代碼審查期間的視覺檢查應該是這些方法需要的所有測試。

PHPUnit不測試任何東西。它只是幫助您編寫測試並運行它們的工具。你寫測試,你決定在每個測試中測試什麼方法。

如果您有關包含/排除方法的問題是關於代碼覆蓋率的話,那麼您將遇到錯誤的道路。代碼覆蓋本身並不是一個目標,它不顯示任何內容。 100%的代碼覆蓋率和一個成功的測試套件很容易實際上不會測試代碼。

在編寫描述代碼行爲的測試中達成目標。不要使用setter來獲取所需的對象屬性;添加您需要初始化對象的許多構造函數參數。僅將設置器用於可選屬性。根據需要使用更少的吸氣劑。在其方法中封裝特定於對象的行爲,不要像使用數組一樣使用對象(僅用於存儲值)。