断言 var 是 phpunit 中没有特定字符的非空字符串

2022-08-30 21:50:52

我想断言变量是phpunit中的(非空白)字符串,但我不想断言字符串必须与任何确切的字符串匹配。

例如,我想提取一个用户名,并确保我成功获得了一些非空白用户名,但我并不关心我得到了哪个用户名。

我可以很容易地断言它是一个非空变量,或者它是一个与某个字符串完全匹配的字符串,或者断言var是一个没有phpunit帮助的字符串:

$this->assertNotEmpty($username);
$this->assertSame('myusername', $username);
$this->assertTrue(is_string($username));

这些都接近我需要的,使用is_string实际测试正确的条件,但是自己做is_string还不够好,因为当测试失败时,我再也无法获得有用的,信息丰富的消息,而不是告诉我实际返回了什么类型的值,错误消息变得无用:

Failed asserting that false is true.

那么,如何使用 phpunit 的断言系统断言 var 是字符串类型且非空的呢?


答案 1

您可以将自己的消息添加到所有PHPUnit断言中,像这样的东西应该适合您:-

$this->assertTrue(is_string($username), "Got a " . gettype($username) . " instead of a string");

否则,您可以使用

$this->assertInternalType('string', $username, "Got a " . gettype($username) . " instead of a string");

查看手册


这个答案现在已经过时了。有关最新解决方案,请参阅此答案


答案 2

从2018年开始,和被剥夺了。assertInternalType()assertNotInternalType()

在以下情况下使用代替:

assertIsArray()

assertIsBool()

assertIsFloat()

assertIsInt()

assertIsNumeric()

assertIsObject()

assertIsResource()

assertIsString()

assertIsScalar()

assertIsCallable()

assertIsIterable()

assertIsNotArray()

assertIsNotBool()

assertIsNotFloat()

assertIsNotInt()

assertIsNotNumeric()

assertIsNotObject()

assertIsNotResource()

assertIsNotString()

assertIsNotScalar()

assertIsNotCallable()

assertIsNotIterable()


推荐