[英]Trying to mock a class so it won't execute constructor in phpUnit
我正在测试一个控制器,它拥有一个对象,每次我做测试时都会在它的构造函数中抛出异常,因为构造函数检查一些环境变量不是空的(但它们在测试过程中是空的)。 我尝试使用 getMockBuilder()->disableOriginalConstructor()、createMock、Mockery::mock()->makePartial() 模拟该类,我尝试在调用 parent::setUp 之前和之后在 setUp() 中执行此操作,我尝试这样做单元测试中的所有内容而不是 setUp(),它们都执行构造函数,我不明白为什么!
下面是一个测试示例:
public function setUp(): void
{
self::$mockClient = $this->createMock('App\Helpers\Client');
parent::setUp();
}
public function testSuccessfullyPost()
{
$input_data = [
'name' => 'valid name',
'email' => 'valid@email.com'
];
$this->json('POST', $this->testUri, $input_data, ['authentication' => $this->getToken()]);
$this->seeStatusCode(201);
}
有人有想法吗?
我正在使用 phpUnit 9.5.10
我过去使用过以下内容:
$this->mockSchema = $this->getMockBuilder('Drupal\sqlsrv\Driver\Database\sqlsrv\Schema')
->setMethods(['getDefaultSchema', '__construct'])
->setMockClassName('MockSchema')
->setConstructorArgs([NULL])
->disableOriginalConstructor()
->getMock();
$this->mockSchema->method('getDefaultSchema')->willReturn('dbo');
如果禁用原来的构造函数,我觉得还是需要“设置方法”来阻止父构造函数的执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.