断言对象值在 PHPUnit 中的范围内



我对使用 PHPUnit 相当陌生,所以我希望这不是一个浪费时间的问题:

我有一组在对象上断言相等的测试。

问题是设置日期时,日期/时间可能会相差 1 秒。 我知道可以断言一个值介于两个值之间,如下所示:

$this->assertThat(
$testFloat,
$this->logicalAnd(
$this->greaterThan(1.65),
$this->lessThan(1.66)
)
);

但是,我的值驻留在对象中,所以我的断言等于失败。

任何人都可以提供帮助,或提供一些如何解决此问题的线索吗?

最好的选择是重构测试或代码,以便时间不会偏离一秒,并且对象相等。 没有看到代码,我不确定你想做什么。 但我猜您正在测试的代码中创建日期/时间。 将时间作为您必须提供的参数,然后您不必担心一秒钟或其他任何事情。

很难测试的是代码异味。 更改代码以使其更易于测试。 如果这不是一个选项,那么您将不得不不比较对象。 相反,我会检查对象的类型并检查所有公共属性以确保正确。

assertEquals也可以采用增量来比较值。

https://phpunit.readthedocs.io/en/7.1/assertions.html#assertequals

assertEquals(float $expected, float $actual[, string $message = '', float $delta = 0])

虽然我认为这不适用于对象。 它用于浮点比较。

最新更新