新しく作成されたインスタンスをモックしますか?
-
05-07-2019 - |
質問
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つのオプションのみが表示される
- phpunitのいくつかの機能は知らない-これが私がここで尋ねる理由です^^
- 古いコードを変更する必要があります-これはより良いと思います
だから、オプション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;
}
}
その方法で、結果の処理を制御できます。
所属していません StackOverflow