📜  PHPUnit | assertNotContainsOnly()函数(1)

📅  最后修改于: 2023-12-03 15:18:33.347000             🧑  作者: Mango

PHPUnit | assertNotContainsOnly()函数

PHPUnit是一个常用的PHP单元测试框架,提供了许多方便程序员编写单元测试的函数。其中一个函数是assertNotContainsOnly()函数。

函数介绍

assertNotContainsOnly()函数用于判断一个数组或迭代器中是否存在不是指定类的对象。如果存在,则测试通过;否则,测试失败。

函数原型:assertNotContainsOnly(string $type, iterable $haystack [, bool $isNativeType = null [, string $message = '']])

参数解释:

  • $type: 指定的类名。可以是字符串,也可以是类的实际对象。
  • $haystack: 被检查的数组或迭代器。
  • $isNativeType: 是否为基本类型。默认值为null,表示不是基本类型。
  • $message: 断言失败时的提示信息。
用法示例

假设我们有以下的类:

class Foo {
    public $name = 'Foo';
}

class Bar {
    public $name = 'Bar';
}

然后我们创建一个数组:

$data = [
    new Foo(),
    new Foo(),
    new Bar(),
];

我们要测试这个数组中是否存在不是Foo类的对象,可以使用assertNotContainsOnly()函数:

$this->assertNotContainsOnly(Foo::class, $data);

这个断言应该会成功,因为这个数组中还有一个Bar对象。如果我们把数据改成这样:

$data = [
    new Foo(),
    new Foo(),
];

则这个断言将会失败,因为这个数组中只包含了Foo对象,不存在其他类的对象。

我们也可以在代码中使用类的实际对象代替类名:

$foo = new Foo();
$data = [
    $foo,
    new Foo(),
];
$this->assertNotContainsOnly($foo, $data);

同样的,这个断言也应该会成功。

注意事项
  • $type参数可以是字符串,也可以是类的实际对象。如果是类的实际对象,则类型判断会使用其类名。
  • 如果$isNativeType参数为true,则表示$type参数为基本类型。
  • 如果$haystack参数是空的数组或迭代器,则这个断言总是会失败。