我是单元测试的新手并试图关注TDD。
我的CardStackTest
,有很多测试,比如这些......
public function testGetTopStackThrowsExceptionIfFirstArgumentNotInt()
public function testGetTopStackReturnsNullIfNoCardsAvailable()
public function testGetTopStackReturnsInstanceOfCardStack()
public function testGetTopStackRemovesAmountOfCardsFromStack()
public function testGetTopStackReturnsRestOfCardsIfNumberHigherThanCardsAvailable()
现在......这些都是有效的,一切都很好,很乐意接受更好的测试方法命名的提示。
我的问题是。在我看来,我已经选择了getBottomStack
方法。我知道它需要与我的getTopStack
方法完全相同的测试。也许我会添加一个额外的测试beyound。
我的第一个想法是制作像testReturnsInstanceOfCardStack
这样的私有方法,然后将公共测试点设为私有方法。
但是,我应该以同样的方式编写每个测试,还是有办法解决这个问题,也许可以进行一些可重复使用的测试?
答案 0 :(得分:1)
如果您发现在测试用例中开始获得代码重复,您也可以开始重构测试用例的代码。
但是,当所有测试都是绿色(通过)时,请注意您只进行重构 。此规则不仅适用于代码库,还适用于测试库。
例如,您可以将重复的代码移动到私有方法中,然后在公共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); }
进行可重复使用测试的另一种方法是使用数据提供程序,但更多的是测试数据。例如,如果多个测试方法需要相同的测试数据,则两者都可以共享一个数据提供者。
希望这有助于提供一些一般指导。尝试自己,不要忘记将所有代码和测试置于版本控制之下并经常提交。