我刚开始使用 PHPUnit,所以我希望这不是一个浪费时间的问题:
我有一组断言对象相等的测试。
问题是在设置日期时,日期/时间可能会偏离 1 秒。 我知道可以断言一个值介于两个值之间,如下所示:
$this->assertThat(
$testFloat,
$this->logicalAnd(
$this->greaterThan(1.65),
$this->lessThan(1.66)
)
);
但是,我的值驻留在一个对象中,所以我的 assertEquals 失败了。
任何人都可以提供帮助或提供一些线索来解决这个问题吗?
最佳答案
您最好的选择是重构您的测试或代码,这样时间不会相差一秒并且对象将相等。没有看到代码,我不确定你到底想做什么。但我猜你是在你正在测试的代码中创建一个日期/时间。将时间作为您必须提供的参数,然后您就不必担心会延迟一秒或任何事情。
难以测试的是代码味道。更改代码以使其更易于测试。如果那不是一个选项,那么您将不得不不比较对象。相反,我会检查对象的类型并检查所有公共(public)属性以确保一切正确。
assertEquals
也可以采用增量来比较值。
https://phpunit.readthedocs.io/en/7.1/assertions.html#assertequals
assertEquals(float $expected, float $actual[, string $message = '', float $delta = 0])
虽然我认为这不适用于对象。它用于浮点比较。
关于php - 断言对象值在 PHPUnit 中的范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906108/