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');
}
也許你的代碼覆蓋率工具表明你已經測試了積極的條件,但不是負面的(如果在第38行中沒有執行,則內部阻止)?嘗試編寫一個測試,其中isPost()返回false。 – 2011-02-08 21:12:43
我確實沒有帖子的測試,我已經添加了使用的測試。任何其他建議? – Sosy 2011-02-08 21:17:33