簡體   English   中英

帶有依賴注入的PHPUnit,使用instanceof()測試模擬對象

[英]PHPUnit with Dependency Injection, testing the mock object using instanceof()

我已經解耦/使用依賴注入的抽象代碼。 但是,使用抽象代碼,我的數據庫類都返回一個PDO對象,因為我使用不同的類來處理不同的數據庫。

例如:

class MySQL extends \Database
{
...
    public function CreateConnection
    {
        ...
        return $PDOConnection;
    }
}

class Oracle extends \Database
{
...
    public function CreateConnection
    {
        ...
        return $PDOConnection;
    }
}

然后,數據庫類具有用於處理查詢,創建語句等的通用例程。這使主代碼數據庫不知道,因為可以在代碼中調用RunQuery,LimitResults等內部方法,並將其轉換為每個數據庫的正確代碼和格式。

我的問題現在出現在如何測試返回的對象上。 雖然我知道要模擬它進行測試,但我確實要確保可以檢查該類是否返回了正確的對象。 我可能想返回一個緩存對象或其他基於配置的內容,因為可能不使用PDO。

因此,我想檢查模擬對象是否正確。

public testPDOObjectReturned()
{
    $MockObject = $this->getMock('\Database\MYSQL');
    $MockObject->expects($this->any())
               ->method('CreateConnection');
    $this->assertInstanceof('PDO', $MockObject->CreateConnection(MYSQL::UsePDO));
}

但是,我不知道如何將返回的對象設置為使用InstanceOf()測試的類/對象。

我收到一個錯誤:

1) lib\Database\PDO\MYSQL_Test::testCreateConnection
Failed asserting that null is an instance of class "PDO".

如何設置返回的類以測試它是正確的對象類型?

您的CreateConnection存根應該返回一些內容。

$MockObject->expects($this->any())
           ->method('CreateConnection');
           ->will($this->returnValue($this->getMock('PDO')));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM