最近私はPHPUnitテストを作成し始めました。これは私のモデルコードです(私はCodeIgniter 3を使用しました)。コードカバレッジを100%にする方法
Account_model.php
class Account_model extends CI_Model
{
...
public function select_by_seq($seq = '', $select_columns = [])
{
try {
$bind = [':a_seq' => $seq];
// check $select_colums is exist in table
if ($this->check_column($select_columns) === false)
{
throw new Exception('columns illegal', 201);
}
...
$sql = "select ....
from {$this->db->dbprefix('account')}
where a_seq = :a_seq";
$query = $this->db->query($sql, $bind);
// ===== this always not runing. =====
if ($query === false)
{
// ===== this always not runing. =====
throw new Exception('sql errors', 301);
}
else
{
return $query->result_array();
}
}
catch (Exception $error)
{
// set error log
$this->set_error_log($error->getCode() . $error->getMessage());
}
return false;
}
}
私は自分でSQLを書くので、これは私のテストAccount_model_test.php
class Account_model_test extends TestCase
{
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();
$CI =& get_instance();
}
public function setUp()
{
$this->resetInstance();
loader('model', 'account_model');
$this->obj = $this->CI->account_model;
}
public function test_select_by_seq()
{
$result = $this->obj->select_by_seq(
$seq = '20160830'
);
$this->assertCount(1, $result);
}
public function test_select_by_seq_with_illegal_column()
{
$result = $this->obj->select_by_seq(
$seq = '20160830',
$select_columns = ['illegal']
);
$this->assertFalse($result);
}
...
}
です。私は私のPHPUnitテストを設立したのはこれをカバーすることができませんif ($query === false)
。そして、私のコードカバレッジは100%に達しませんでした。この問題は、100%が単体テストにとって非常に重要だと私に考えさせてくれましたか?それともモデルコードを修正する必要がありましたか?ありがとうございます。
あなたが100%のカバレッジを目指す場合、テストを書く目的を忘れてしまいました。 – axiac