单元测试日期敏感功能?

时间:2010-10-17 20:40:14

标签: php javascript ruby unit-testing

我正在尝试为日期助手类编写测试。我想知道这是什么最佳做法。
这是PHP中的一个例子。

    public static function get_date($offset = 0){
        $date = mktime(0, 0, 0, date('m')  , date('d') + $offset, date('Y'));
        return array(
            'day'   => date('D',$date),
            'month' => date('M',$date),
            'year'  => date('Y',$date)
        );
    }

    public static function today(){
        return self::get_date();
    }

    public static function tomorrow(){
        return self::get_date(1);
    }

    public static function yesterday(){
        return self::get_date(-1);
    }

所以我正在寻找的是可以测试这些函数的测试示例或者编写这些函数的新方法,因此它们可以直观地测试。

我在Java中找到了一些例子,但它们看起来非常不优雅,我真的不懂Java,除非你将Actionscript 3算作Java;)

Javascript或Ruby中的解决方案作为示例也非常有用,但我的类是用PHP编写的,因此这将是理想的。

谢谢!

1 个答案:

答案 0 :(得分:4)

我通常做这样的事情:

<?php

class Date
{
    protected $date;

    public function __construct($date = null)
    {
        $this->date = $date ? $date : time();
    }

    public function today()
    {
        // to something with $this->date
    }
}


class DateTest extends PHPUnit_Framework_TestCase
{
    public function testToday()
    {
        $date = new Date(strtotime('2010-10-17 00:00:00'));
        $this->assertEquals($expectedValue, $date->today());
    }
}

它遵循date()所做的相同原则,即接收第二个可选参数,即参考时间。