在 phpunit 中断言具有一定容差的相等时间

问题描述 投票:0回答:1

我刚刚开始使用 phpunit,这是我现在没有什么问题的地方。 我正在为其编写测试的类有一个 Logger 方法,调用该方法时,会将时间戳添加到属性中,如下所示:

$this->logger->info('Log created', [
    'user_id' => $order->getCustomerId(),
    'time' => microtime(true),
]);

现在在我的测试类中创建该类的新模拟对象后,这就是我检查某些给定模拟数据是否等于我的记录器的方法:

$this->logger
    ->expects($this->once())
    ->method('info')
    ->with(
        $this->equalTo('Campaign code created'),
        $this->equalTo(['user_id' => 2000, 'time' => **??**])
    );

如何更改问号以断言该数组等于其创建时间?或者有什么方法可以让我根本不需要检查这个属性?因为现在没有时间属性它会抛出错误。

symfony phpunit test-double
1个回答
0
投票

equalToWithDelta
可能确实有效(它本质上与
assertEqualsWithDelta
相同,增量只是对于字符串被忽略,但适用于所有数字)。但是,由于增量应用于数组的所有值,因此如果数组中也有类似 ids 的内容,这可能会带来问题。所以,根据您的测试,这可能没问题......

但是,还有

callback
将函数作为参数,这将允许您当场进行更复杂的测试。没有这样做,而是在源代码中找到的,所以我希望这个解决方案是正确的:

$this->callback(function ($value) {
    return $value['user_id'] == 2000 
        && $value['time'] >= $minTime
        && $value['time'] <= $maxTime;
})

callback
使用的类是
Callback
约束

您还可以编写一个自定义比较器,我想这将远远超出您正在寻找的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.