我是使用PHPUnit的新手,所以我希望这不是浪费时间的问题:
我有一组测试,它们在一个对象上断言等于。
问题是设置日期时,日期/时间可能会偏差1秒。 我知道可以在两个值之间断言一个值,如下所示:
$this->assertThat(
$testFloat,
$this->logicalAnd(
$this->greaterThan(1.65),
$this->lessThan(1.66)
)
);
但是,我的值存在于一个对象中,所以我的assertEquals失败了。
任何人都可以提供帮助,或者提供一些解决方法吗?
答案 0 :(得分:2)
您最好的选择是重构测试或代码,以免时间浪费一秒钟,并且对象相等。没有看到代码,我不确定您要做什么。但是我猜测您正在测试的代码中创建日期/时间。将时间设置为您必须提供的参数,然后您就不必担心一秒钟或更长时间了。
难以测试的东西是代码气味。更改代码以使其更易于测试。如果这不是一个选择,那么您将不必比较对象。相反,我将检查对象的类型并检查所有公共属性,以确保一切正确。
assertEquals
也可以使用增量来比较值。
https://phpunit.readthedocs.io/en/7.1/assertions.html#assertequals
assertEquals(float $expected, float $actual[, string $message = '', float $delta = 0])
尽管我认为这不适用于对象。它旨在进行浮点比较。