0

依存性注入を使用する分離/抽象コードがあります。ただし、抽象化されたコードでは、異なるデータベースを操作するための異なるクラスがあるため、私のデータベース クラスはすべて PDO オブジェクトを返します。

例えば:

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

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

Database クラスには、クエリの操作、ステートメントの作成などのための共通ルーチンがあります。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".

返されたクラスが正しいオブジェクト タイプであることをテストするように設定するにはどうすればよいですか?

4

1 に答える 1

1

スタブCreateConnectionは何かを返す必要があります。

$MockObject->expects($this->any())
           ->method('CreateConnection');
           ->will($this->returnValue($this->getMock('PDO')));
于 2013-02-22T22:21:28.407 に答える