テストとは

テストについてまとめていきます。


そもそもテストとは、コードを書いてブラウザで表示させてエラーがあったらそれを修正してまたブラウザで表示して、、という手動テストを自動化する機能です。


◆テストには3種類あります。

  • 単体テスト(unitテスト):モデルやヘルパーのテスト
  • 機能テスト(functionalテスト):コントローラのテスト
  • 統合テスト(integrationテスト):実際のリクエストをシュミレーションするテスト


◆では、これらは実際何をテストするのか?

  • 単体テスト
  • * モデルの検索系メソッド(findなど)が正しいデータを取得できるか * モデルの更新系メソッド(saveなど)が正しくデータベースの状態を変化させるか * モデルの更新系メソッドが不正な入力に対して適切なエラーを発生させるか(値の検証の確認)
  • 機能テスト
  • * 適切なテンプレートが選択されているか * インスタンス変数に適切な値が格納されているか * 適切にレンダリングされているか、あるいは適切なURLにリダイレクトされているか * 更新系のアクションが正しくデータベースの状態を変化させるか
  • 統合テスト
  • * 例えば、ログインして名簿に新しいメンバーを追加してログアウトする、といった一連の動きをテストする 統合テストはユーザーが使う流れをシミュレートするテストで、あんまり書きません。機能テストに書けちゃうので。

    テスト駆動開発

    テストはバグを調べるためだけのものではなく、機能を実装する前にテストを行うこともできます。 仕様を明確にするためにテストをつくり、テストを通すためにコーディングを行う、というスタイルのことをテスト駆動開発と言います。 テスト駆動開発は以下の流れで行っていきます。

    ①テストを書く
     ある機能が正しく実装されていれば成功し、そうでなければ失敗するようなテストスクリプトを作る
     ⇒機能が動く条件を定める =仕様決め
    

    ②テストが失敗することを確認
     テストスクリプトを実行
      ∟成功⇒テストスクリプトが上手く書けてない
      ∟失敗⇒エラーの表示を詳しく調べ、
                テストスクリプト自体のバグやデータベースの
                設定ミス等による失敗ではないか確認
    

    ③テストが成功するよう実装
     実際のコーディング。目標はテストを通すこと。
     この段階では多少コードが汚くてもOK。
    

    リファクタリング
     コードを綺麗にする。
     「テストが成功する」という状態を維持したままプログラムを書き換える。
     変数名を変える、長すぎるメソッドを分割する、コードの重複部分を除く、など。
    

    ①テストを書く
    

    ②...以下繰り返し
    

    このテスト駆動開発によって単純な短いサイクルを繰り返せば、コーディングの目標が明確になり、プログラマの負担を減らすことが出来ます。




    次のテーマではテストスクリプトについて説明します。
    最後までお読みいただきありがとうございます!