Phpunit 我该如何编写一个测试来覆盖掉在裂缝中的代码行呢
我试图实现100%的代码覆盖率,但我无法确定如何覆盖下面的57行。这只是一个结尾。我在所有代码中都有这些行,以及像}else{这样的行,但它们没有被覆盖,也没有被标记为死代码 我如何编写一个测试来覆盖这些行Phpunit 我该如何编写一个测试来覆盖掉在裂缝中的代码行呢,phpunit,code-coverage,Phpunit,Code Coverage,我试图实现100%的代码覆盖率,但我无法确定如何覆盖下面的57行。这只是一个结尾。我在所有代码中都有这些行,以及像}else{这样的行,但它们没有被覆盖,也没有被标记为死代码 我如何编写一个测试来覆盖这些行 34 : public function addAction() { 35 :
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行,但我可能错了。这个测试应该覆盖那一行吗?或者我需要再写一个吗?对不起,我没有读到答案。谢谢。这很有效,我用虚假数据测试了我的表格,但不是控制员。我不能,直到我的声誉提高,我会的。