2017-01-25 2 views
0

phpUnitテストを関数Aに呼び出すと、その中に別の関数Bが呼び出されます。関数Bの戻り値を置き換えて正常にテストを続けることができます戻り値を関数に置き換えるにはどうすればいいですか?

public function A($parameter = null){ 
// do something 
$response_B = $this->B(); 
// continue with the function A 
} 

注:関数BはSQLでデータベースにクエリを行います。私のテストでは、クエリを実行する必要はありません。単純に関数Bの結果を定義する必要があります。 モックとスタブで試しましたが、実際は完全に理解できません。 機能の私の英語

+1

あなたは '関数B'のリターンを交換するとはどういう意味ですか? サンプルコードを追加して、わかりやすく理解してください。 – Antony

+0

コードをアップロードできますか? – Svekke

+0

あなたは本当にやりたいことを知っていなくても、什器やモックを使うことができます。 – Oliver

答えて

0

例で申し訳ありませんしてください:

function pass(){ 
$test = check(3); 
return $test; //returns true when 3 is parameter used to call function check() 
} 

function check($int) { 
if ($int == 3) { 
return true; 
} else { 
return false; 
} 
0

ので、あなたが欲しいものを、「モッキング」と呼ばれ、これは簡単な関数では動作しません。

それを簡単にする。(コードがテストされていない)

class MySpecialClass 
{ 
public function doSomeSpecialThings(){ 
    $response = $this->doFancySQL(); 
    return $response; 
} 
} 

ので、あなたがメソッド呼び出しを操作したい場合、あなたは外部のクラスにそれを抽出し、それを

class MySpecialClass 
{ 
    public function setFancySqlInterface(FancySqlInterface $fancySqlInterface){ 
$this->fancySqlInterface = $fancySqlInterface; 
} 
public function doSomeSpecialThings(){ 
    $response = $this->fancySqlInterface->doFancySQL(); 
    return $response; 
} 
} 
を注入する必要があります

これで、特定の応答を返す偽のクラスを使用して、テストでsetFancySqlInterfaceメソッドを使用できるようになりました。

あなたが偽のクラスを作成するか、このタスクの例として

ための「モッキングフレームワーク」を使用するか、あなたは私が偽のエンティティを作成し、偽のリポジトリに追加している

https://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L35ここに見ることができますhttps://github.com/BlackScorp/guestbook/blob/master/tests/UseCase/ListEntriesTest.php#L70

あなたは私が何を意味するか理解してほしい:D

関連する問題