繁体   English   中英

试图模拟一个类,这样它就不会在 phpUnit 中执行构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM