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)
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)
小智 5
我认为最好使用这种构造:
$this->assertThat($new_id, $this->logicalAnd(
$this->isType('int'),
$this->greaterThan(0)
));
Run Code Online (Sandbox Code Playgroud)
因为它不仅会检查$ new_id变量的类型,而且会检查此变量是否大于0(假设id不能为负或零),并且这样做更加严格和安全。
从 PHPUnit 8 开始,其他方法现已弃用,assertInternalType()现在将抛出此错误并失败:
assertInternalType() 已弃用,并将在 PHPUnit 9 中删除。重构您的测试以使用assertIsArray()、assertIsBool()、assertIsFloat()、assertIsInt()、assertIsNumeric()、assertIsObject()、assertIsResource()、assertIsString()、而是使用assertIsScalar()、assertIsCallable() 或assertIsIterable()。
现在建议使用assertIsNumeric()或assertIsInt()用于此目的。