Подтвердить что ты не робот

PHPUnit equalTo по датам с дельта

У меня проблема в PHPUnit, где я хотел бы использовать параметр delta в методе equalTo при сравнении дат. Позвольте сказать, что я хочу рассматривать даты как равные, если они отличаются не более чем на 10 секунд. Что будет подходящей стоимостью $some_delta? 10? 10000? Или что-то совсем другое?

$this->_restClient->expects($this->at(0))
    ->method('getData')
    ->with(
        $this->equalTo(array('1')),
        $this->equalTo(array('2')),
        $this->equalTo($this->_date, $some_delta),
        $this->equalTo(null),
    )
    ->will($this->returnValue($this->_restResponses['generalRestResponse']));
4b9b3361

Ответ 1

Значения дельта просто должны быть числом секунд

Вам нужны секунды, чтобы метки времени могли отличаться от 4th parameter to assert equals или в вашем случае 2nd to equalTo. Обе эти функции (assertEquals/equalTo) указывают на PHPUnit_Framework_Constraint_IsEqual, поэтому обработка треугольника одинакова.

Пример:

<?php

class foo extends PHPUnit_Framework_TestCase {

    public function testDateDiffsWorks() {
        $date1 = new DateTime('2011-01-01 00:00:00');
        $date2 = new DateTime('2011-01-01 00:00:03');

        $this->assertEquals($date1->getTimestamp(), $date2->getTimestamp(), '', 5);
    }

    public function testDateDiffsFails() {
        $date1 = new DateTime('2011-01-01 00:00:00');
        $date2 = new DateTime('2011-01-01 00:00:03');

        $this->assertEquals($date1->getTimestamp(), $date2->getTimestamp(), '', 0.5);
    }

}

И вывод

Первый тест работает второй сбой.

phpunit test.php
PHPUnit 3.5.14 by Sebastian Bergmann.

.F

Time: 0 seconds, Memory: 6.00Mb

There was 1 failure:

1) foo::testDateDiffsFails
Failed asserting that <integer:1293836403> matches expected <integer:1293836400>.

/home/edo/test.php:16