gpt4 book ai didi

PHPUnit 测试一个带有 expects() 方法的类

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

问题是我正在模拟的依赖项有一个 expects() 方法。这个类依赖于我正在测试的类。

设置() 方法

$this->test = $this->getMockBuilder(Request::class)->disableOriginalConstructor()
->getMock();

所以当我写我的测试时

$this->test->expects($this->once())->method('otherMethod')
->willReturn(0);

这会报错:

Cannot redeclare Mock_Test_f21c25ee::expects() in ...

我该如何解决这个问题?

编辑:

在我使用 setMethodsExcept() 尝试了建议的解决方案之后,我现在收到了一条不同的错误消息。我也在使用 PHPunit 7.5

Declaration of Mock_Test_fa1cb6c5::expects(PHPUnit\Framework\MockObject\Matcher\Invocation $matcher) should be compatible with App\Services\Api\Test::expects()

注意:忘了说我使用的是 Laravel 5.5,它有自己的 TestBase 类

Edit2:在我尝试使用默认的 PHPUnit 测试用例后,我仍然收到与上面相同的错误消息。 (必须兼容错误)

最佳答案

您需要使用setMethodsExcept() 方法来避免excepts 方法的重新声明。

以这种方式创建模拟应该可行:

$this->request = $this->getMockBuilder(Request::class)
->setMethodsExcept(['expects'])
->disableOriginalConstructor()
->getMock();

编辑:一些澄清:

为了测试你的案例,我做了以下事情:

class Expecting
{
public function get()
{
return 'my json';
}

public function expects()
{
return 'who knows what';
}
}

class ClassA
{
public function testMe($the_expect_dependency)
{
$the_expect_dependency->get();
}
}

在我的单元测试中,我的声明与您的声明几乎相同:

class ClassATest extends \PHPUnit\Framework\TestCase
{
public function testThatItCanBeMocked()
{
$mock = $this->getMockBuilder(Expecting::class)
->setMethodsExcept(['expects'])
->disableOriginalConstructor()
->getMock();

$mock->expects($this->once())->method('get')
->willReturn('my json');

$my_obj = new ClassA();
$my_obj->testMe($mock);
}
}

当删除 setMethodsExcept() 调用时,它给出了您提到的准确错误,不确定可能出了什么问题?

顺便说一句,我使用的是 phpunit 7.5 版。

关于PHPUnit 测试一个带有 expects() 方法的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54533092/

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