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

标签 php unit-testing testing phpunit

我刚开始使用 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/

相关文章:

mysql - 来自数据库的数据提供者测试值

ios - UIAutomation 中的辅助功能标签

php - 我如何处理购物篮,其中有很多产品可能具有不同的成本计算

php - 创建所见即所得编辑器

php - 我怎样才能选择一个随机数,但在 PHP 中具有正态概率分布?

c# - 如何对基于枚举的 switch 语句的默认情况进行单元测试

.net - 使用 CollectionAssert 对 IList 进行单元测试

php - 从当前日期时间减去日期时间以获得计时器

python - 使用 unittest 为 Python 中的许多测试用例提供正确的结构

api - 使用jmeter “too many attempts error”进行API测试