2011-02-08 4 views
1

私は100%のコードカバレッジを達成しようとしているが、私は以下のような行をカバーする方法を判断することはできません。それは単に終わりです}。私は、これらの行を私のコード全体に加えて、else {などの行にも書いていますが、それらはカバーされておらず、デッドコードとしてマークされていません。どのように私はクラック、サンプルを提供するコード行をカバーするためにテストを書くだろう

これらの行をカバーするテストを作成するにはどうすればよいですか?

34     :  public function addAction() {                
    35     :                         
    36    2 :   $form = new Roles_Form_Add();               
    37     :                         
    38    2 :   if ($this->getRequest()->isPost()) {             
    39     :                         
    40    1 :    if ($form->isValid($this->getRequest()->getPost())) {        
    41     :                         
    42    1 :     $clean = $form->getValues();             
    43     :                         
    44    1 :     $roleService = new Roles_Service_Role();          
    45     :                         
    46    1 :     $role = $roleService->fetchNew();            
    47    1 :     $role->setFromArray($clean)              
    48    1 :      ->save();                 
    49     :                         
    50    1 :     $this->_helper->flashMessenger('A new role has been added.');     
    51     :                         
    52    1 :     $this->_helper->redirector('view','role','roles',array('id'=>$role->id));  
    53    1 :     return;                   
    54     :                         
    55     :    }                     
    56     :                         
    57    0 :   }                      
    58     :                         
    59    1 :   $form->setAction($this->_helper->url('add','role','roles'));       
    60     :                         
    61    1 :   $this->view->addRoleForm = $form;              
    62     :                         
    63    1 :  }                       
    64     :    


public function testAddAction() { 

    $this->dispatch('/roles/role/add'); 

    $this->assertModule('roles'); 
    $this->assertController('role'); 
    $this->assertAction('add'); 

    $this->assertQuery('form#addRole input#name'); 

} 

public function testAddActionWithPost() { 

    $this->getRequest()->setMethod('POST') 
     ->setPost('name','Test'); 

    $this->dispatch('/roles/role/add'); 

    $this->assertRedirectTo('/roles/role/view/id/1'); 

} 
+0

あなたのコードカバレッジツールは、あなたがポジティブな条件をテストしたが、否定的な条件をテストしていないことを示唆しているかもしれません(38行目のブロックが実行されていない場合、 isPost()がfalseを返すテストを作成してみてください。 –

+0

私は投稿なしのテストをしていますが、私は使用されたテストを追加しました。その他のアドバイスは? – Sosy

答えて

4

コードの最初の一瞥から、私はそのライン40(if ($form->isValid($this->getRequest()->getPost())) {)は常に、あなたのテストでtrueに評価され、したがって、機能addActionは常に53

ラインで return;文で残っているでしょうね
+0

私は使用しているテストを追加しました。私はGETリクエストを送信するテストをしています。これは59行以上がカバーされているため、57行目もカバーする必要があると仮定していますが、間違っている可能性があります。このテストはその行をカバーすべきか?あるいは別のものを書く必要がありますか? – Sosy

+0

申し訳ありませんが、私は答えを読んでいます。ありがとうございました。これはうまくいきましたが、私は私のフォームを誤ったデータでテストしましたが、コントローラはテストしていません – Sosy

+0

私の評判が高くなるまで、私はそれをすることはできません。 – Sosy

関連する問題