Php 编写一个单元测试来测试返回它的静态方法';我们自己的班级';常数

Php 编写一个单元测试来测试返回它的静态方法';我们自己的班级';常数,php,unit-testing,static-methods,Php,Unit Testing,Static Methods,我的任务是用一堆静态方法为类编写一个单元测试,其中大多数方法返回类本身定义的某种常量,我在思考一个测试的价值,这个测试只是从测试本身中断言一些东西。例如: public static function stringToHex($color = null) { switch($color) { case 'green': return self::OK; // self::OK = '#00cc00' break; d

我的任务是用一堆静态方法为类编写一个单元测试,其中大多数方法返回类本身定义的某种常量,我在思考一个测试的价值,这个测试只是从测试本身中断言一些东西。例如:

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

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

现在,您的测试信任并依赖于实现细节以确保正确。这很好,除非你不相信常数有正确的值。如果是这样,您应该传入期望值的十六进制值,例如与数据提供程序

/**
 * @dataProvider provideColorToHexMapping
 */
public function testStringToHex($colorName, $expectedHex) {
    $this->assertEquals(
        $expectedHex,
        MyClass::stringToHexColor($colorName)
    );
}
public function provideColorToHexMapping()
{
    return array(
        array('green', '#00cc00'),
        …
    );
}

现在,您的测试信任并依赖于正确的实现细节。这很好,除非你不相信常数有正确的值。如果是这样,您应该传入期望值的十六进制值,例如与数据提供程序

/**
 * @dataProvider provideColorToHexMapping
 */
public function testStringToHex($colorName, $expectedHex) {
    $this->assertEquals(
        $expectedHex,
        MyClass::stringToHexColor($colorName)
    );
}
public function provideColorToHexMapping()
{
    return array(
        array('green', '#00cc00'),
        …
    );
}

@数据提供者将通过Dunhamzzzit@Dunhamzzz数据提供者将传递它