如何断言结果是PHPUnit中的整数?

bnp*_*887 53 php phpunit unit-testing

我想能够测试结果是一个整数(1,2,3 ...),其中函数可以返回任何数字,例如:

$new_id = generate_id();
Run Code Online (Sandbox Code Playgroud)

我以为它会是这样的:

$this->assertInstanceOf('int', $new_id);
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

PHPUnit_Framework_Assert :: assertInstanceOf()的参数#1必须是类或接口名称

Far*_*mov 117

$this->assertInternalType("int", $id);
Run Code Online (Sandbox Code Playgroud)

  • @Andrew您现在可能已经知道了。“ 34”无效 (2认同)

Fra*_*ula 28

我更喜欢使用官方的PHPUnit类常量.

PHPUnit v5.2:

use PHPUnit_Framework_Constraint_IsType as PHPUnit_IsType;

// ...

$this->assertInternalType(PHPUnit_IsType::TYPE_INT, $new_id);
Run Code Online (Sandbox Code Playgroud)

或者最新的写作时刻是v7.0:

use PHPUnit\Framework\Constraint\IsType;

// ...

$this->assertInternalType(IsType::TYPE_INT, $new_id);
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 16

下面给出了后代的原始答案,但我强烈建议assertInternalType()按照其他答案的建议使用.


原始答案:

只需将assertTrue与is_int()一起使用即可.

$this->assertTrue(is_int($new_id));
Run Code Online (Sandbox Code Playgroud)

  • 在创建测试时,建议使用最具体的测试用例.这将创建更好的描述性错误. (3认同)

小智 5

我认为最好使用这种构造:

$this->assertThat($new_id, $this->logicalAnd(
    $this->isType('int'), 
    $this->greaterThan(0)
));
Run Code Online (Sandbox Code Playgroud)

因为它不仅会检查$ new_id变量的类型,而且会检查此变量是否大于0(假设id不能为负或零),并且这样做更加严格和安全。


Sha*_*ast 5

从 PHPUnit 8 开始,其他方法现已弃用,assertInternalType()现在将抛出此错误并失败:

assertInternalType() 已弃用,并将在 PHPUnit 9 中删除。重构您的测试以使用assertIsArray()、assertIsBool()、assertIsFloat()、assertIsInt()、assertIsNumeric()、assertIsObject()、assertIsResource()、assertIsString()、而是使用assertIsScalar()、assertIsCallable() 或assertIsIterable()。

现在建议使用assertIsNumeric()assertIsInt()用于此目的。

  • 谢谢您的回答!我也将其包含在最佳答案中,因此可以立即看到。 (2认同)