簡體   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