2013-09-30 125 views
1

im單元測試新手,試圖跟隨TDD。Phpunit:測試結果相同

我我CardStackTest,有測試次數,像這樣......

public function testGetTopStackThrowsExceptionIfFirstArgumentNotInt() 
public function testGetTopStackReturnsNullIfNoCardsAvailable() 
public function testGetTopStackReturnsInstanceOfCardStack() 
public function testGetTopStackRemovesAmountOfCardsFromStack() 
public function testGetTopStackReturnsRestOfCardsIfNumberHigherThanCardsAvailable() 

現在......這些都在工作,所有的罰款,並愉快地接受更好的測試方法命名提示。

我的問題是。在我看來,我已經想到了一種getBottomStack方法。我知道它需要與我的getTopStack方法完全相同的測試。也許我會爲此增加一項額外的測試。

我的第一個想法是使像testReturnsInstanceOfCardStack這樣的私人方法,然後使公共測試點的私人。

但是我應該以相同的方式寫每個測試,還是有辦法幹這個,也許做一些可重用的測試?

回答

1

如果您看到您開始在測試用例中獲得代碼複製,您也可以開始重構測試用例的代碼。

但是,當所有測試都是綠色(合格)時,請注意您僅重構。這個規則不僅適用於代碼庫,也適用於測試庫。

例如,您可以將重複的代碼移動到私有方法中,然後您可以在public testXyz() - Method中調用該方法。

這裏是一個測試用例的私人助手功能給出的例子中,情況是不同的,但它應該有助於說明,從answer to "PHPUnit Testing version of assertIsA"

private function assertNumber($actual, $message = "Is a number") { 
    $isScalar = is_scalar($actual); 
    $isNumber = $isScalar && (is_int($actual) || is_float($actual)); 
    $this->assertTrue($isNumber, $message); 
} 

另一種方式使用數據提供者進行可重複使用的測試,但更多的是測試數據。例如,如果多種測試方法需要相同的測試數據,則兩者可以共享一個數據提供者。

希望這有助於一些一般指導。嘗試一下自己,不要忘記把所有的代碼和測試都放在版本控制之下,而且你經常提交。