【问题标题】:Assert an object value is within a range in PHPUnit断言对象值在 PHPUnit 的范围内
【发布时间】:2018-11-27 02:25:59
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 为什么你的时间可以减少 1 秒?
  • 您好 k0pernikus,对于(非常)迟到的回复感到抱歉!它比较的是日期/小时而不是秒,所以如果设置了时间,指的是日期,如果它关闭了 1 秒,日期将不匹配。

标签: php unit-testing testing phpunit


【解决方案1】:

您最好的选择是重构您的测试或您的代码,这样时间不会相差一秒钟,并且对象将相等。没有看到代码,我不确定你到底想做什么。但我猜你是在你正在测试的代码中创建一个日期/时间。将时间设置为您必须提供的参数,这样您就不必担心会延迟一秒钟或其他任何事情。

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

assertEquals 也可以使用 delta 来比较值。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 2013-09-09
    • 2017-02-17
    • 2013-05-02
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多