テストとは
テストについてまとめていきます。
そもそもテストとは、コードを書いてブラウザで表示させてエラーがあったらそれを修正してまたブラウザで表示して、、という手動テストを自動化する機能です。
◆テストには3種類あります。
- 単体テスト(unitテスト):モデルやヘルパーのテスト
- 機能テスト(functionalテスト):コントローラのテスト
- 統合テスト(integrationテスト):実際のリクエストをシュミレーションするテスト
◆では、これらは実際何をテストするのか?
- 単体テスト * モデルの検索系メソッド(findなど)が正しいデータを取得できるか * モデルの更新系メソッド(saveなど)が正しくデータベースの状態を変化させるか * モデルの更新系メソッドが不正な入力に対して適切なエラーを発生させるか(値の検証の確認)
- 機能テスト * 適切なテンプレートが選択されているか * インスタンス変数に適切な値が格納されているか * 適切にレンダリングされているか、あるいは適切なURLにリダイレクトされているか * 更新系のアクションが正しくデータベースの状態を変化させるか
- 統合テスト * 例えば、ログインして名簿に新しいメンバーを追加してログアウトする、といった一連の動きをテストする 統合テストはユーザーが使う流れをシミュレートするテストで、あんまり書きません。機能テストに書けちゃうので。
◆テスト駆動開発
テストはバグを調べるためだけのものではなく、機能を実装する前にテストを行うこともできます。 仕様を明確にするためにテストをつくり、テストを通すためにコーディングを行う、というスタイルのことをテスト駆動開発と言います。 テスト駆動開発は以下の流れで行っていきます。①テストを書く ある機能が正しく実装されていれば成功し、そうでなければ失敗するようなテストスクリプトを作る ⇒機能が動く条件を定める =仕様決め
②テストが失敗することを確認 テストスクリプトを実行 ∟成功⇒テストスクリプトが上手く書けてない ∟失敗⇒エラーの表示を詳しく調べ、 テストスクリプト自体のバグやデータベースの 設定ミス等による失敗ではないか確認
③テストが成功するよう実装 実際のコーディング。目標はテストを通すこと。 この段階では多少コードが汚くてもOK。
④リファクタリング コードを綺麗にする。 「テストが成功する」という状態を維持したままプログラムを書き換える。 変数名を変える、長すぎるメソッドを分割する、コードの重複部分を除く、など。
①テストを書く
②...以下繰り返し
このテスト駆動開発によって単純な短いサイクルを繰り返せば、コーディングの目標が明確になり、プログラマの負担を減らすことが出来ます。
次のテーマではテストスクリプトについて説明します。
最後までお読みいただきありがとうございます!