类的对象无法转换为int

时间:2018-11-30 12:19:02

标签: php laravel unit-testing phpunit-testing

我想在存储库中为保存方法编写phpunit测试。我的回购代码是:

public function saveCustomer(Custom $custom)
{
    try
    {
        $custom->save();

        return array(
            'status' => true,
            'customerId' => $custom->getId()
        );
    }
    catch(\Exception $e)
    {
        return array(
            'status' => false,
            'customerId' => 0
        );
    }
 }

我写了这个测试:

public function testSaveNewUye()
{
    $request = array(
        'email' => 'www@www.com',
        'phone' => '555 555 555',
        'password' => '34636'
    );
    $repo = new CustomerRepository();
    $result_actual = $this->$repo->saveCustomer($request);
    $result_expected = array(
        'status' => true,
        'customerId' => \DB::table('custom')->select('id')->orderBy('id', 'DESC')->first() + 1
    );
    self::assertEquals($result_expected, $result_actual);
}

我得到以下错误:

  

ErrorException:无法将类App \ CustomerRepository的对象转换为int

你能帮我吗?

1 个答案:

答案 0 :(得分:4)

问题在这里:

$repo = new CustomerRepository();
$result_actual = $this->$repo->saveCustomer($request);

您正在分配和使用不同的变量。

尝试像这样:

$this->repo = new CustomerRepository();
//     ^------- assign to `$this`
$result_actual = $this->repo->saveCustomer($request);
//                      ^------- remove `$`

在进行$this->$repo->时,PHP尝试将$repo(对象)转换为无效的字符串$this->(object)->

然后您在这里遇到第二个错误:

\DB::table('custom')->select('id')->orderBy('id', 'DESC')->first() + 1

从数据库中获得一个对象(实例为stdClass),不能简单地+ 1

整个事情可能像

\DB::table('custom')->select('id')->orderBy('id', 'DESC')->first()->id + 1

(从返回的对象中,需要属性id。)