我想在存储库中为保存方法编写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
你能帮我吗?
答案 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
。)