我的任务是使用一堆静态方法为类编写单元测试,其中大部分都返回类本身定义的某种常量,并且正在思考测试的价值,该测试只是断言来自在测试本身内。例如:
public static function stringToHex($color = null) {
switch($color) {
case 'green':
return self::OK; // self::OK = '#00cc00'
break;
default 'red':
return self::DANGER; // '#cc0000'
}
}
如果我在测试自己的类中定义了返回值,我将如何有效地测试它?在我的头顶,它将是这样的:
public function teststringToHex() {
$this->assertEquals(MyClass::stringToHexColor('green'), MyClass::OK);
}
但这似乎不对,因为我断言结果是测试甚至不知道它的价值。
答案 0 :(得分:0)
现在您的测试信任并依赖于实现细节是正确的。这很好,除非你不相信常数具有正确的价值。如果是这样,您应该传递期望的十六进制值,例如使用DataProvider
/**
* @dataProvider provideColorToHexMapping
*/
public function testStringToHex($colorName, $expectedHex) {
$this->assertEquals(
$expectedHex,
MyClass::stringToHexColor($colorName)
);
}
public function provideColorToHexMapping()
{
return array(
array('green', '#00cc00'),
…
);
}