2

我的任务是为具有一堆静态方法的类编写单元测试,其中大多数返回类本身中定义的某种常量,并且正在思考测试的价值,它只是在测试中断言事物本身。例如:

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);
}

但这似乎不正确,因为我断言结果是测试甚至不知道其价值的东西。

4

1 回答 1

0

现在您的测试信任并依赖于正确的实现细节。除非您不相信常量具有正确的值,否则这很好。如果是这样,您应该传入期望的十六进制值,例如使用 DataProvider

/**
 * @dataProvider provideColorToHexMapping
 */
public function testStringToHex($colorName, $expectedHex) {
    $this->assertEquals(
        $expectedHex,
        MyClass::stringToHexColor($colorName)
    );
}
public function provideColorToHexMapping()
{
    return array(
        array('green', '#00cc00'),
        …
    );
}
于 2012-05-23T11:34:48.737 回答