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