テストについて

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


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


◆テストの種類

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



◆では、何をテストするのか?

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


統合テストはユーザが使う流れで、あんまりテストは書きません。機能テストにそういったことも書けてしまうということもあります。



テスト駆動開発について

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

テスト駆動開発では、以下のサイクルを何度も繰り返すことで開発が進みます。

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


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


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


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


①テストを書く


②...以下繰り返し

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





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