Модульное тестирование чувствительных к дате функций? - PullRequest
2 голосов
/ 18 октября 2010

Я пытаюсь написать тесты для класса помощника по дате. Мне интересно, что лучше для этого делать.
Вот пример на 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 Ответ

4 голосов
/ 18 октября 2010

я обычно делаю что-то вроде этого:.

<?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() делает, что получить второй необязательный аргумент, ссылка времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...