【问题标题】:Write a unit test to test a static method that returns it's own classes' constants编写一个单元测试来测试一个返回它自己的类常量的静态方法
【发布时间】:2012-05-23 11:30:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: php unit-testing static-methods


    【解决方案1】:

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

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

    【讨论】:

    • @Dunhamzzz 数据提供者将通过它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多