首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHPUnit equalTo on dates with Delta.

PHPUnit equalTo on dates with Delta.
EN

Stack Overflow用户
提问于 2011-08-17 18:35:38
回答 3查看 17.5K关注 0票数 31

我在PHPUnit中遇到了一个问题,在比较日期时,我想在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']));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-05 01:51:03

PHPUnit >= 7.5 (DateTime)

class MyDatesTest extends PHPUnit_Framework_TestCase {

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

        // ± 5 seconds are equals
        $this->assertEqualsWithDelta($date1->getTimestamp(), $date2->getTimestamp(), 5);
        // ± 1 second are distinct
        $this->assertNotEqualsWithDelta($date1->getTimestamp(), $date2->getTimestamp(), 1);
    }
}

PHPUnit >= 7.5 (碳)

class MyDatesTest extends PHPUnit_Framework_TestCase {

    public function testAllDateOk() {
        $date1 = Carbon::now();
        $date2 = Carbon::now()->addSeconds(3);

        // ± 5 seconds are equals
        $this->assertEqualsWithDelta($date1->timestamp, $date2->timestamp, 5);
        // ± 1 second are distinct
        $this->assertNotEqualsWithDelta($date1->timestamp, $date2->timestamp, 1);
    }
}

说明:从PHPUnit 8开始,不推荐使用带有4个参数的assertEquals

票数 13
EN

Stack Overflow用户

发布于 2011-08-17 19:53:03

增量值只需为秒数

您需要时间戳可以与4th parameter to assert equals2nd 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
票数 45
EN

Stack Overflow用户

发布于 2019-08-12 19:09:28

对edorian答案的补充-从PhpUnit v7.5开始,您可以使用assertEqualsWithDelta(),自PhpUnit v8以来,就不再推荐使用assertEquals()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7091396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档