2017-02-18 15 views
1

私はsymfonyで私のサービスの中で簡単な関数をテストしようとしています。symfony phpunitは期待値を受け取りません

この関数は、存在する場合はポスト値を取得し、多次元配列を設定します。 これはサービス内の私の関数である:私は理論的にのみセルを設定

public function setValue(Request $request) 
    { 
     for($i = 1; $i <= 3; $i++){ 
      for($j = 1; $j <= 3; $j++){ 
       if(($request->request->get('cell_' . $i . '_' . $j) != null){ 
        $value = $request->request->get('cell_' . $i . '_' . $j); 
        echo('Value: ' . $value . '|'); 
        $this->tiles[$i][$j] = $value; 
       } 
       else{ 
        $this->tiles[$i][$j] = '0'; 
       } 
      } 
     } 
    } 

そして、これはテスト(すべてではないテストが、簡単な部分)の私の一部であり、この場合

public function testGetSatusGameEnd() 
{ 
    $this->requestMock = $this 
     ->getMockBuilder('Symfony\Component\HttpFoundation\Request') 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $this->requestMock->request = $this 
     ->getMockBuilder('Symfony\Component\HttpFoundation\ParameterBag') 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $this->requestMock->request->expects($this->at(0)) 
     ->method('get') 
     ->with('cell_1_1') 
     ->will($this->returnValue('1')); 

    $board = new Board(); 
    $board->setValue($this->requestMock); 

    var_dump($board->getArrayResult()); 
} 

値1が、私はすべての結果をダンプするときが、私は確認してください空の値ですが、私はを期待しています。この

array(3) { 
    [1] => 
    array(3) { 
    [1] => 
    NULL 
    [2] => 
    string(1) "0" 
    [3] => 
    string(1) "0" 
    } 
    [2] => 
    array(3) { 
    [1] => 
    string(1) "0" 
    [2] => 
    string(1) "0" 
    [3] => 
    string(1) "0" 
    } 
    [3] => 
    array(3) { 
    [1] => 
    string(1) "0" 
    [2] => 
    string(1) "0" 
    [3] => 
    string(1) "0" 
    } 
} 

cell_1_1内部ので私が取得0は空ではない! cell_1_1の中に1を返すにはどうしたらいいですか?私の疑似のエラーは何ですか?

おかげ

+0

は終わっコピーから欠落している ')'であれば最初のブロックでちょうど誤りですか?私はこれを再現しようとしていた、これが私が気づいた最初のことでした。 – mickadoo

+0

はい、申し訳ありませんが、 –

答えて

1

理由getはnullを返しているat()のインデックスが既に(if文で)最初の呼び出しによってインクリメントされたためです。

私は有用な情報をthis articleで見つけました。

expects()at()は、実際のパラメータバッグの動作を反映していないので、呼び出されたときに関係なく同じ結果を返すので、気にしないかもしれません。

あなたが戻るには、コールバックでモックオブジェクトを使用することができます「1」の名前はcell_1_1はこのように、ある場合にのみ

$this 
    ->requestMock 
    ->request 
    ->method('get') 
    ->will($this->returnCallback(function ($name) { 
      return $name === 'cell_1_1' ? '1' : null; 
    })); 

それとも、ただのSymfony要求自体を使用することができますし、自分自身の多くと同じ本当の要求を使用してテスト用

サンプルコード:-)合併症:

$request = new Request([], ['cell_1_1' => '1']); 
    $board = new Board(); 
    $board->setValue($request); 
+0

このソリューションはうまくいきます!ありがとう –

0

あなたは、配列のインデックス0を充填されていません。

あなたのループを見てみましょう:

... 
for($i = 1; $i <= 3; $i++){ 
    for($j = 1; $j <= 3; $j++){ 
... 

は両指数1代わりの指標0からスタート。このようにして、最初の配列要素は決して決して決して決まらないので、それはnullです。

この方法でforを変更する必要があります。

for($i = 0; $i < 3; $i++){ 
    for($j = 0; $j < 3; $j++){ 
+0

をコピーしたときにエラーが発生しました。同じエラーを試しましたが、この解決は機能しません。 –

関連する問題