2011-02-08 43 views
1

我試圖達到100%的代碼覆蓋率,但我無法確定如何覆蓋下面的#57行。這只是一個結局}。我在我的所有代碼中都有這些行,以及像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。 – 2011-02-08 21:12:43

+0

我確實沒有帖子的測試,我已經添加了使用的測試。任何其他建議? – Sosy 2011-02-08 21:17:33

回答

4

從代碼的第一印象,我會說,40行(if ($form->isValid($this->getRequest()->getPost())) {)始終計算爲在測試中true,因此功能addAction總是與return;聲明留在第53行

相關問題