質問

iにはTDDを使用しなかった古いコードがあります 今、私はこのような関数のテストを書きたいです

function somefunction($someargs){
    // do a few checks on $someargs
    $database = new DB_PG();
    $result = $database->select($query);
    // do some changes on result
    return $result;
}

phpunitと一般的なテストではあまり経験がないため 私の質問は: どうすればDB_PGをモックできますか? 私はテストでgetMock()を試しましたが、この関数は" new"を使用しているため、インスタンスを取得する 私のモックオブジェクトは無視されます、それは理にかなっています

2つのオプションのみが表示される

  1. phpunitのいくつかの機能は知らない-これが私がここで尋ねる理由です^^
  2. 古いコードを変更する必要があります-これはより良いと思います

だから、オプション1の答えは誰でも知っていますか?

thx all

役に立ちましたか?

解決

オプション1

次のように機能するように機能を変更できますか

function someFunc($existingArgs, $db = null)
{
    $db = (is_null($db)) = new DB_PG();
    $result = $db->select($query)

    $return $result;
}

これにより、dbインスタンスを渡すことができます。これにより、少なくともこの関数をテストできます。将来、someFuncの作業がモデル上で行われ、dbロードがdao / repository / factoryを介して行われるようにリファクタリングできます。

オプション2

この関数が存在するファイルのrequire / includeを介してDB_PGがまだ取り込まれていない場合、テストクラス内にダミークラスを定義できます

class DB_PG
{
    public function select($query)
    {
        //use phpunit's libs to output a mock object, you'll need to use the PHPUnit_Framework_Mock::generate() static method, I think that's the name.
        return $mockResult;
    }
}

その方法で、結果の処理を制御できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top