【问题标题】:PHPUnit Testing version of assertIsAassertIsA 的 PHP 单元测试版本
【发布时间】:2013-09-20 09:15:46
【问题描述】:

PHPUnit 是否有一个检查值类型的断言

功能:

public function getTaxRate()
{
    return 21;  
}

我想测试返回的值是一个数字。

对不起,我是 PHPUnit 测试的新手。

我发现 SimpleTest 有 assertIsA(); PHPUnit 有没有类似的东西。

问候

【问题讨论】:

  • simple-test assertIsA(); 的正确等效项实际上是 Phpunit assertInstanceOf();。请仔细检查您的意思是来自 simpletest 的正确断言,并可能提供参考。我参考:simpletest.org/api/SimpleTest/UnitTester/…

标签: phpunit


【解决方案1】:

“是一个数字”的概念在弱类型语言(如 php)中有点模糊。在 php 中,1 + "1" 是 2。字符串 "1" 是数字吗?

Phpunit assertion assertInternalType() 可能会对您有所帮助:

$actual = $subject->getTaxRate();
$this->assertIternalType('int', $actual);

但是您不能将断言与逻辑运算符结合使用。所以你不能轻易表达“断言 42.0 是整数或浮点数”的想法。这种更密集的断言可以归为一个私有的辅助断言方法:

private function assertNumber($actual, $message = "Is a number")  {
    $isScalar = is_scalar($actual);
    $isNumber = $isScalar && (is_int($actual) || is_float($actual));
    $this->assertTrue($isNumber, $message);
}

然后您只需在同一个测试用例类中的测试中使用它:

$actual = $subject->getTaxRate();
$this->assertNumber($actual);

您也可以编写自己的自定义断言。如果您需要经常运行数字伪类型断言,这可能是您最好的选择,除非我错过了什么。请参阅Extending PHPUnit,它显示了这是如何完成的。

相关:

【讨论】:

  • 如果传递了数字字符串,is_int 将不会返回 true。请改用is_numeric。谢谢
  • 在传递数字字符串时,OP 希望返回 true 一点都不清楚。
猜你喜欢
  • 2018-12-01
  • 1970-01-01
  • 2013-10-23
  • 2017-02-14
  • 2015-02-09
  • 2011-09-20
  • 2015-11-17
  • 2020-09-03
  • 2017-10-26
相关资源
最近更新 更多