gpt4 book ai didi

php - 如何使用返回自身实例的方法模拟别名类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:13 25 4
gpt4 key购买 nike

我已经成功使用 Mockery 最近进行了 PHPUnit 测试。然而,我目前正在工作的项目中存在依赖项,该项目使用静态方法调用与 API 进行交互。我正在努力测试一个特定的用例,感觉我会在开发路线图中找到其他类似的用例。

以此类为例:

namespace Name\Space;
class User
{
/**
* @return \Name\Space\User[]
*/
public static function list(): array
{
// ...
}
public static function create(array $attrs): User
{
// ...
}
}

如果我只想断言一个方法返回一个基本类型,例如数组:

Mockery::mock('alias:\Name\Space\User')
->shouldReceive('list')
->andReturn([]);

它工作正常,主要是因为我没有测试数组内容。

但是,我必须调用 create 方法,它返回类本身的一个实例 (User)。如果我这样做:

$user = new \Name\Space\User();
Mockery::mock('alias:\Name\Space\User')
->shouldReceive('create')
->andReturn($user);

显然,别名将不起作用,因为该类已经通过自动加载器(在本例中为 Composer )加载。

有人对如何解决这个问题有建议吗?

最佳答案

在闭包中创建 User 怎么样?

<?php

$user = Mockery::mock('overload:\Name\Space\User')
->shouldReceive('create')
->andReturnUsing(function() {
return new \Name\Space\User();
});

关于php - 如何使用返回自身实例的方法模拟别名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55423839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com