2013-09-30 96 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); 
} 

另一种方式使用数据提供者进行可重复使用的测试,但更多的是测试数据。例如,如果多种测试方法需要相同的测试数据,则两者可以共享一个数据提供者。

希望这有助于一些一般指导。尝试一下自己,不要忘记把所有的代码和测试都放在版本控制之下,而且你经常提交。