2011-11-10 22 views
0

ビルドクラスをpublicにするbuildClassメソッドを実行し、いくつかの引数が必要です。PHPUnitスタブ、テスト中の関数を置き換えたい

私のテストでは、これらの引数を完全に削除し、PHPUnitのMockを使って完全に異なるものを追加したいと思います。

ので:から:

class ClassBuilder{ 
    public function buildClass($id, $some, $vars){ 
    $class = new Class($id, $some, $vars); 
    return self::getClass(db_Class, $class); 
    } 
} 

だから、ここに私のアイデアを得るかもしれないが、私はそれがそこにリターン機能を行うようモックを作りたいです。

$myClassStub->getMock("ClassBuilder"); 
$myClassStub->->expects($this->any()) 
    ->method("buildClass") 
    ->with($this->anything(), $this->anything()) 
    ->will($this->returnCallback("getClass")); 

しかし、どのように動作するのかわかりません。これは私がそれがどのようになると思うかですが、議論をどこに置くべきか分かりません。私をここで助けてください、多くのappriciated。

/マーカス

答えて

3

それはあなたがその関数の中に、少なくとも2つの引数を渡すことを確認するために存在している場合は、ちょうど->with($this->anything(), $this->anything()) exepctを残すことができます。

私が理解していることを除いて、あなたは別のクラスを返すことを望んでいます。その場合、私は次のことをお勧めします:

$yourClassToReturn = "..."; // create the class here 

$myClassStub->getMock("ClassBuilder"); 
$myClassStub->expects($this->any()) 
    ->method("buildClass") 
    ->with($this->anything(), $this->anything()) 
    ->will($this->returnValue($yourClassToReturn)); 
+0

これで、$ yourClassToReturnも模擬インスタンスになりますか?だから私は同じ方法でそれを設定します。ブリリアント。しかし、ビルダーを使用して構築したいクラスは、ClassBuilderの別のクラスから作成されます。したがって、私はクラスビルダーで関数を実行したいと思っています。これはプライベート関数であるためです。それは可能ですか? – Oldek

+0

ポイントは、ClassBuilderを模倣したときに、偽の "buildClass"がそれらとやりとりすることはないので、プライベートメソッドは気にしません。あなたは論理を持たずに「まさにこれをやる」と言います。 (それが理にかなって、私はあなたを正しく理解していますか?) – edorian

+0

私の意図は、機能の一部を模擬して、他の部分をテストすることです。 – Oldek

関連する問題