Phpunit 我该如何编写一个测试来覆盖掉在裂缝中的代码行呢

Phpunit 我该如何编写一个测试来覆盖掉在裂缝中的代码行呢,phpunit,code-coverage,Phpunit,Code Coverage,我试图实现100%的代码覆盖率,但我无法确定如何覆盖下面的57行。这只是一个结尾。我在所有代码中都有这些行,以及像}else{这样的行,但它们没有被覆盖,也没有被标记为死代码 我如何编写一个测试来覆盖这些行 34 : public function addAction() { 35 :

我试图实现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');

}

第一眼看到代码,我会说第40行if$form->isValid$this->getRequest->getPost{在测试中总是计算为true,因此函数addAction总是保留在第53行的return;语句中。

第一眼看到代码,我会说第40行if$form->isValid$this->getRequest->getPost{在您的测试中总是计算为true,因此函数addAction总是与第53行的return;语句一起保留。

也许您的代码覆盖率工具建议您测试了肯定条件,但如果第38行中的block inside没有执行,则不是否定条件?请尝试编写一个isPost返回false的测试。我确实有一个没有post的测试,我已经添加了所使用的测试。还有其他建议吗?可能您的代码覆盖率工具建议您测试了阳性条件,但如果第38行未执行,则在块内部时没有测试到阴性条件?请尝试编写一个测试,其中isPost返回false。我确实有一个没有post的测试,我已经添加了所使用的测试。还有其他建议吗建议?我已经添加了我正在使用的测试。我确实有一个发送GET请求的测试,这就是为什么第59+行被覆盖的原因,我假设它也应该覆盖第57行,但我可能错了。这个测试应该覆盖那一行吗?或者我需要再写一行吗?对不起,我错过了阅读答案。谢谢。这起作用了,我用错误的数据测试了我的表单,b但不是控制器。我不能,直到我的声誉更高,我会。我已经添加了我正在使用的测试。我确实有一个发送GET请求的测试,这就是为什么第59+行被覆盖的原因,我假设它也应该覆盖第57行,但我可能错了。这个测试应该覆盖那一行吗?或者我需要再写一个吗?对不起,我没有读到答案。谢谢。这很有效,我用虚假数据测试了我的表格,但不是控制员。我不能,直到我的声誉提高,我会的。