一般的に単体テストを行う方法を学ぼうとしていますが、具体的には、私が取り組んでいるプロジェクトは CakePHP で構築されています。Simple Acl Controlled Applicationチュートリアルから直接取得したユーザー モデルに、この parentNode() メソッドがあります。
public function parentNode() {
if (!$this->id && empty($this->data)) {
return null;
}
if (isset($this->data['User']['group_id'])) {
$groupId = $this->data['User']['group_id'];
} else {
$groupId = $this->field('group_id');
}
if (!$groupId) {
return null; // not tested
} else {
return array('Group' => array('id' => $groupId));
}
}
私は次のテストを書きました
public function testParentNodeHasNoUserDataOrId() {
unset($this->User->id);
unset($this->User->data);
$this->assertNull($this->User->parentNode());
}
public function testParentNodeWithGroupIDInUserData() {
$this->User->data['User']['group_id'] = 1;
$this->assertEquals(array('Group'=>array('id'=>1)),$this->User->parentNode());
}
public function testParentNodeWithoutGroupIDInUserData() {
$this->User->id = 1;
unset($this->User->data['User']['group_id']);
$this->assertEquals(array('Group'=>array('id'=>1)), $this->User->parentNode());
}
そして、それらはすべて機能しているようです。ただし、私のコード カバレッジ レポートはreturn null;
、if(!$groupId)
ブロック内で をテストしていないことを示しています。その行をテストする方法がわかりません。
私が知る限り、決して実行されません。User モデルに ID とデータがない場合、最初の if ブロックで null が返されます。少しごまかしてユーザーに偽のデータを与えると、グループ1が返されます(代わりにfalseを返す必要がある$this->field('group_id')
と思いますが、そうではありません)
単体テストでは、いつすべてをテストする必要がありますか? どうすればテストできreturn null if(!$groupId)
ますか? 決して実行されないコードがある場合、それを削除する必要がありますか?
ありがとう!