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

时间:2018-06-18 09:13:51

标签: php unit-testing testing phpunit

我是使用PHPUnit的新手,所以我希望这不是浪费时间的问题:

我有一组测试,它们在一个对象上断言等于。

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

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

但是,我的值存在于一个对象中,所以我的assertEquals失败了。

任何人都可以提供帮助,或者提供一些解决方法吗?

1 个答案:

答案 0 :(得分:2)

您最好的选择是重构测试或代码,以免时间浪费一秒钟,并且对象相等。没有看到代码,我不确定您要做什么。但是我猜测您正在测试的代码中创建日期/时间。将时间设置为您必须提供的参数,然后您就不必担心一秒钟或更长时间了。

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

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

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

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

尽管我认为这不适用于对象。它旨在进行浮点比较。