这个问题与PHPUnit有关,虽然 应该是一个全局的xUnit设计问题。
我正在为一个班级Image
编写单元测试用例。
此课程的其中一个方法是setBackgroundColor()
。
我需要为此方法测试4种不同的行为,
array(255,255,255)
array('red' => 255, 'green' => 255, 'blue' => 255)
(这是GD函数的输出格式imagecolorsforindex()
)IMG_COLOR_TRANSPARENT
目前,我已将所有这些包含在我的测试用例testSetBackgroundColor()
中的1个测试中,但是我感觉这些应该是4个单独的测试,因为测试变得很长并且做了很多
我的问题是,我该怎么办?我是否将所有这些封装到Image测试用例的1个测试中,或者我将上述内容拆分为单独的测试,例如,
testSetBackgroundColorErrors
testSetBackgroundColorShorthandRGB
testSetBackgroundColorRGB
testSetBackgroundColorTransparent
我在这里提出了问题http://pastebin.com/f561fc1ab。
感谢
答案 0 :(得分:7)
答案 1 :(得分:3)
我倾向于按照您的描述拆分测试。
答案 2 :(得分:0)
我在概念上将我的测试分为两类(正如相当多的TDD从业者所做的那样):集成测试和单元测试。单元测试应该测试一件事,我应该遵守我在任何特定时刻测试单一合同的规范 - 通常一种方法需要一次测试。这迫使我编写一些小而可测试的方法,这些方法让我高度自信。这反过来又会引导我去编写小型可测试类。
集成测试是更高级别的测试,用于证明组件之间的交互问题,否则这些组件将被证明可以通过单元测试单独工作。我写的更少,并且必须明智地应用它们,因为永远不会有完全的集成级别覆盖。这些重点是证明各个组件之间风险较大的交互领域,并可以使用书面验收测试作为指导。
识别需要进行集成测试的区域更像是一种“感觉”。如果您对单元测试一直保持纪律,那么您应该很好地了解集成测试需求的位置,即具有更深调用堆栈或跨进程交互的区域,或者您知道风险较高的区域。或者,您可以决定集成测试是证明高级行为期望的好方法,这些期望可以映射到产品所有者的书面要求。这也很好用。
答案 3 :(得分:0)
是的,您应该将它们分成四个测试。也许你不愿意,因为它会重复代码。我读了一篇文章,认为单元测试应该非常可读(抱歉,我没有参考)。它继续讨论如何做到这一点,但它的要点是编写效用函数。