2012-03-16 17 views
2

私は長いプログラミング経験を持ち、次のプロジェクトで単体テストを使用することに決めました。私は、PHPを使用して、CodeIgniterとOracleをrdbmsとして使用してアプリケーションを作成しています。 私のすべてのモデルは基本的にデータベースと連携するメソッドしか持っていません。わかりましたので、どうすればこれらをテストするのですか?彼らはテストする価値がありますか?なぜなら、クエリが間違っているとPHPエラーが発生し、基本的にすべてのテストが成功するためです。 モデルをテストする際に、何に焦点を当てて、何を期待する必要がありますか?単体テスト101モデルを正しくテストする方法は?

例: 簡単な方法:

public function register($username, $password, $email) 
{ 
    $hash = $this->_generate_hash(); 

    return $this->add(array(
     'username'  => $username, 
     'password'  => hash('sha256', $this->config->item('salt') . $password . $hash), 
     'email'   => $email, 
     'hash'   => $hash 
    )); 

クエリは、このインサートは、常に動作すると私は関数にテストのparamsを追加する場合、それは常に渡しますokですが、SQLはokですので、テストに合格した場合、または私はどのようにこれをテストすべきですか? } `

答えて

2

モデルをテストするとき、私はコードカバレッジと代替パラメータの2つについて考えようとします。

コードカバレッジ:高いレベルのコードカバレッジを達成することが重要です。これにより、異なる実行状況でどのようなことが起こりうるのか、どのように処理するのかを正確に把握することができます。しばしば、テストするのが難しい領域があります。それは、少しのレビューの後で、書かれた方法が最適ではないことを認識することになります。私のコードを素早くリファクタリングすることで、すべてのものがよりきれいに見えるようになり、よりうまく動作し、さらにテスト可能になります。

代替パラメータ: CRUD機能に送信されるデータは完全に制御できますが、期待したものとは異なる状況をどのように処理しますか?あなたはwhen the query is wrong I will get a php errorと言っていますが、それは本当に起こりたいことですか?例外処理を使用してこれらのエラーをキャッチして、スクリプト実行の突然の即時の死ではなく、あなた自身の条件で対処するほうがよいでしょうか? また、SQLインジェクションに脆弱なものがあります。テストケースを作成したことがないため、わからないことがありますか?

これは私の個人的には私のモデルをテストするユニットを考えるときに思っているカップルです。

+0

私はPHPフレームワークとしてCodeIgniterを使用しており、CIのActive Recordを使用していますので、SQLインジェクションはそのコンポーネントによって処理されます。 – Mythriel

+0

これは単にテストケースと可能性について考えさせるものでした。 –

関連する問題