2013-05-01 23 views
5

入力が得られず、nullでない場合はテストできないのはなぜですか?JSON出力のPHPUnitテスト

私の方法私がテストしてい:

/** 
* @method: getCategory 
* retrieves the categories 
* @return json category data 
*/ 
public function getCategory() { 

    $cat = $this->em->getRepository('Entities\Category')->findAll(); 
    $data = array(); 
    foreach ($cat as $res) { 
     $data[] = array(
      'catId' => $res->__get('catId'), 
      'category' => $res->__get('category'), 
      'item' => $res->__get('item') 
     ); 
    } 
    echo json_encode($data); 
} 

私のテスト:

PHPUnitの3.7.8による:

/** 
* @covers Category::getCategory 
* @todo Implement testGetCategory(). 
*/ 
public function testGetCategory() { 
    $json = $this->object->getCategory(); 
    $this->assertNotNull($json); 
} 

エラーメッセージは、それがオブジェクトのJSON配列を返します。 Sebastian Bergmann。

F[{"catId":1,"category":"FLORALS2","item":"RED ROSES"}, {"catId":2,"category":"TENTS","item":"12X14"}, {"catId":3,"category":"FLORAL","item":"WHITE ROSES"}, {"catId":4,"category":"TENTS","item":"15X24"}, {"catId":5,"category":"CHAIRS","item":"BLACK CHAIR"}, {"catId":6,"category":"CHAIRS","item":"RED CHAIRS"}, {"catId":7,"category":"TENTS","item":"23X23"}, {"catId":8,"category":"CANDLES","item":"RED CANDLES"}, {"catId":9,"category":"CANDLES","item":"WHITE CANDLES"}, {"catId":10,"category":"CANDLES","item":"BLACK CANDLES"}, {"catId":11,"category":"CANDLES","item":"ORANGE CANDLES"}, {"catId":12,"category":"TABLE","item":"4X8 TABLE"}, {"catId":13,"category":"DRAPERYS","item":"24\" WHITE LINEN"}, {"catId":14,"category":"LINEN","item":"WHITE CURTAINS"}, {"catId":17,"category":"DRAPERY","item":"SILK TABLE CLOTH"}, {"catId":18,"category":"FLORAL","item":"ORANGE DAISIES"}]..

時間:0秒、メモリ:10.25Mb

1つの失敗がありました:

1)CategoryTest::testGetCategoryはnullは nullではないことを主張しませんでした。

/var/www/praiseDB/tests/controller/CategoryTest.php:42

+0

assertXXXXは基本的にあなたが考えているものの逆です。たとえば、テキストがNullの場合、assertNotNullはアサートをスローします。あなたの$ jsonはエコーされていたのでNULLです。返されません。 –

答えて

5

あなたのgetCategory()関数は、何か出エコー:

echo json_encode($data); 

をしかし、それは何も返しません。 したがって、$ json変数はテストではnullになります。あなたはおそらく、代わりに関数の最後に値を返すためのもの

:出力をテストするには

return json_encode($data); 

、あなたのテストでexpectOutputString()またはexpectOutputRegex()メソッドを使用する必要があります。非空の出力をテストするために、私は次のようにすればいいと考えている。

/** 
* @covers Category::getCategory 
* @todo Implement testGetCategory(). 
*/ 
public function testGetCategory() { 
    $this->expectOutputRegex('/./'); 
    $this->object->getCategory(); 
} 

は、出力をアサートする方法の詳細については、phpunit documentationを参照してください。

+0

はい、これが返されるはずです。私はリクエストを受け取るアヤックスコールを持っています。どうやら私はこのようにテストすることができないので、そのメソッドが何かをエコーし​​ていることをどのようにテストするのですか? – robasc

+0

これはコントローラメソッドであることを忘れてしまった。これは戻り値の出力なので、コントローラメソッドが出力を返すことを確認するためのテストを書く必要がありますが、良い例やチュートリアルは見つかりません。 – robasc

+0

OK、実際にあなたが望んでいたように、私はphpunitで出力をアサートする方法の詳細をいくつか追加しました。 – Thierry