我正在尝试为下面类中的方法编写测试。但是,当我运行测试时,我收到 get_b64
从未运行的错误?我不明白这是怎么没有运行的。
我已经稍微查看了用于测试静态方法的 mock 文档,但据我所知,这个错误不是由那个引起的?
我需要更改我的测试策略或能够在模拟对象中模拟函数调用吗?
类:
namespace App\Services\Steam;
use App\Services\Steam\Utils;
class Steam
{
public function profile(string $steamID)
{
$b64 = Utils::get_b64($steamID);
if ($b64 === null) {
throw new \App\Exceptions\InvalidSteamId();
}
return new Profile($b64);
}
}
测试用例:
public function test_create_user_object()
{
$id = "123"
$utilsMock = Mockery::mock(\App\Services\Steam\Utils::class);
$utilsMock->shouldReceive('get_b64')
->once()
->with($id)
->andReturn($id);
$steam = new \App\Services\Steam\Steam();
$steam->profile($id);
}
最佳答案
您静态调用get_b64
,这意味着它是从类中调用的,而不是从对象中调用的。
要模拟此类调用,您需要使用 aliases :
public function test_create_user_object()
{
$id = "123"
$utilsMock = Mockery::mock('alias:\App\Services\Steam\Utils');
$utilsMock->shouldReceive('get_b64')
->once()
->with($id)
->andReturn($id);
$steam = new \App\Services\Steam\Steam();
$steam->profile($id);
}
请记住,它完全取代了 Utils
类,因此如果您有更多从该类调用的静态函数,您也需要模拟它们。
关于php - mock 无法在测试方法中调用我的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690984/