PHPUnit 9 - 模拟 void 方法
PHPUnit 9 - Mocking void methods
我刚刚将 phpunit 7.5.20
升级到 phpunit 9.5.0
,我遇到了很多错误(实际上是好错误),但不是 100% 确定如何解决其中一些错误。
只是寻找一些想法来修复以下错误:
Method setDummyStuff may not return value of type NULL, its return declaration is "void"
它仅在您创建 createConfiguredMock()
并将 null
方法作为参数传递时发生。
这是我的测试:
<?php
use Lib\IDummyCode;
class DummyTest extends PHPUnit\Framework\TestCase
{
public function setUp(): void
{
parent::setUp();
}
public function testDummyThatReturnsVoid()
{
$this->createConfiguredMock(IDummyCode::class, [
'setDummyStuff' => null
]);
}
}
这是假人 class:
<?php
namespace Lib;
interface IDummyCode
{
public function setDummyStuff(
int $testInt,
string $testString
): void;
}
你们有什么关于如何改进这个的想法吗?
非常感谢!
createConfiguredMock
的第二个参数采用关联数组,其中键是模拟的方法,值是方法应 return 的值。由于 setDummyStuff
方法不能 return 任何东西(void return 类型),因此定义 return 值没有意义。它不是特别是 null
值。任何值都会失败。
所以你可以忽略那个方法:
$mock = $this->createConfiguredMock(IDummyCode::class, []);
也可以写得更好:
$mock = $this->createStub(IDummyCode::class);
如果您需要验证 setDummyStuff
是否被调用,您必须设置一个期望值。
$mock = $this->createMock(IDummyCode::class);
$mock->expects(self::once())
->method('setDummyStuff')
->with(123, 'Hello');
我刚刚将 phpunit 7.5.20
升级到 phpunit 9.5.0
,我遇到了很多错误(实际上是好错误),但不是 100% 确定如何解决其中一些错误。
只是寻找一些想法来修复以下错误:
Method setDummyStuff may not return value of type NULL, its return declaration is "void"
它仅在您创建 createConfiguredMock()
并将 null
方法作为参数传递时发生。
这是我的测试:
<?php
use Lib\IDummyCode;
class DummyTest extends PHPUnit\Framework\TestCase
{
public function setUp(): void
{
parent::setUp();
}
public function testDummyThatReturnsVoid()
{
$this->createConfiguredMock(IDummyCode::class, [
'setDummyStuff' => null
]);
}
}
这是假人 class:
<?php
namespace Lib;
interface IDummyCode
{
public function setDummyStuff(
int $testInt,
string $testString
): void;
}
你们有什么关于如何改进这个的想法吗? 非常感谢!
createConfiguredMock
的第二个参数采用关联数组,其中键是模拟的方法,值是方法应 return 的值。由于 setDummyStuff
方法不能 return 任何东西(void return 类型),因此定义 return 值没有意义。它不是特别是 null
值。任何值都会失败。
所以你可以忽略那个方法:
$mock = $this->createConfiguredMock(IDummyCode::class, []);
也可以写得更好:
$mock = $this->createStub(IDummyCode::class);
如果您需要验证 setDummyStuff
是否被调用,您必须设置一个期望值。
$mock = $this->createMock(IDummyCode::class);
$mock->expects(self::once())
->method('setDummyStuff')
->with(123, 'Hello');