断言可遍历包含的失败

时间:2018-01-10 18:22:12

标签: php phpunit

测试:

        $this->assertThat(
            array("James Bond", 'james@bond.com', '12345'),
            $this->contains('James Bond')
        );

正常工作,但是如果我将数组更改为object:

        $this->assertThat(
            new User("James Bond", 'james@bond.com', '12345'),
            $this->contains('James Bond')
        );

然后我有错误:

  

断言可穿越者包含'詹姆斯邦德'。

如何使用assertThat with object和contains方法?

我的用户类:

class User
{
    private $name;
    private $mail;
    private $pass;

    public function __construct($name, $mail, $pass)
    {
        $this->name = $name;
        $this->mail = $mail;
        $this->pass = $pass;
    }

    public function getName()
    {
        return $this->name;
    }

    public function getMail()
    {
        return $this->mail;
    }

    public function getPass()
    {
        return $this->pass;
    }
}

1 个答案:

答案 0 :(得分:2)

您没有提供有关您的用户对象的详细信息,但显然它是可遍历的内容。

您是否尝试过iterator_to_array功能?

$this->assertThat(
        iterator_to_array(new User("James Bond", 'james@bond.com', '12345')),
        $this->contains('James Bond')
    );

编辑:

实际上contains会检查一个数组值,这里你的属性是私有的(这很棒),所以检查属性值的唯一方法是使用它的getter

这是你想要做的事情

$this->assertEquals('James Bond', $user->getName());