Presentation is loading. Please wait.

Presentation is loading. Please wait.

テストについて 近畿大学大学院 田中大介 資料:

Similar presentations


Presentation on theme: "テストについて 近畿大学大学院 田中大介 資料:"— Presentation transcript:

1 テストについて 近畿大学大学院 田中大介 資料: http://ecl.info.kindai.ac.jp/~earth-moon/test.ppt

2 テストの有用性 XP : 常に仕様が変化することが前提 ⇒ 何度もコードを書き直す ⇒ エラーを何度もチェックする ⇒ 手作業のチェックは時間がかかる ⇒ テストコードを使って時間を短縮 ⇒ テストを先に作り、そのテストをクリアする コードを書く(テストファースト)

3 テストの種類 ユニットテスト – モデルを対象 –test / unit にテストコードを格納 機能テスト – コントローラを対象 –test / functional にテストコードを格納

4 本日のお品書き 1. テストの実行環境を整える 2. ユニットテストを試してみる 3. 機能テストを試してみる

5 0 .プロジェクトの準備 プロジェクトを作成 –Product モデルを scaffold title : string description : text image_url : string price : integer

6 1.実行環境の準備 テストで使用するデータベースを準備す る 1. 設定 2. テーブルをコピー 3. テストデータを入力

7 テスト1・実行環境 1. 設定 –config / database.yml を同様に変更 –test 部分 adapter : sqlite3 database: db/test.sqlite3

8 テスト1・実行環境 2.テーブルをコピー –rake db:test:clone_structure を実行 (開発用 DB の構成をテスト DB にコピーす る)

9 テスト1・実行環境 3.テストデータを入力 – テストフィクスチャを用いる –test / fixtures / products.yml に記述 – 書式 データ名: カラム名:データ カラム名:データ : –http://ecl.info.kindai.ac.jp/~earth-moon/products.yml

10 テスト2・ユニットテスト 流れ 1. テスト DB のすべてのデータが消える 2. テストデータ(フィクスチャのデータ)が 各テーブルにロードされる 3.setup メソッドを実行 4. テストメソッドでテスト 5.teardown メソッドを実行 6. 1に戻る 7. 全てのテストメソッドを実行すると終了 常にまっさらな状態からテスト可能 (テストの結果が他のテストに影響しない)

11 テスト2・ユニットテスト 1.create/read のテスト 2.update のテスト 3.delete のテスト 4.validation のテスト

12 テスト2・ユニットテスト 1.create/read のテスト 1.fixtures メソッドで、入力するテストデータ を選択 ⇒ fixtures :products 2.test_create メソッドをコーディング ⇒ assert_equal メソッドを使用する assert_equal メソッド – 第一引数に期待値、第二引数に実際値 – 一致しない場合、テスト失敗のメッセージ

13 テスト2・ユニットテスト 1.create/read のテスト 3.before_type_cast –date_made でエラーが発生 ⇒ Time 型に変換されているため –before_type_cast メソッドを使用する ⇒ 属性の最後に「 _before_type_cast 」を追加す る ⇒ 「 @product.date_made_before_type_cast 」 4.assert_kind_of –assert_kind_of でクラスをチェックすることが可 能

14 テスト2・ユニットテスト 1.create/read のテスト 5. テストデータの柔軟性 数字、文字を直入力 ⇒ テストデータが変化するとエラーになる フィクスチャのデータを取ってくるようにする –test / test_helper.rb の self.use_instantiated_fixtures を self.use_instantiated_fixtures = true に変更 –@products に各データがハッシュで格納 ⇒ @products[“ データ名 ”] でデータが取れる – もしくは @ データ名 でも良い

15 テスト2・ユニットテスト 2. update のテスト 1.[ テスト ] 現在の値 2. 値を変更 3.[ テスト ]DB への格納 –assert メソッドを使う 4.DB からデータを再読み込み –reload メソッド 5.[ テスト ] 変更された値

16 テスト2・ユニットテスト 2. update のテスト assert_equal @product_one.price, @product.price @product.price = 30 assert @product.save @product.reload assert_equal 30, @product.price

17 テスト2・ユニットテスト 3. delete のテスト DB のデータを消去 assert_raise メソッドで、 データを呼び出すとエラーが発生するかどうかをテ スト @product.destroy assert_raise(ActiveRecord::RecordNotFound){ Product.find(@product.id) }

18 テスト2・ユニットテスト 4. validation のテスト – 以下の 3 つをチェックする 1.DB にデータが格納できない assert メソッド 2. オブジェクトにエラーが格納された.errors のエラーの数を調べる 関係のないエラーが混じっていないかをチェック 3. エラーの内容.errors のエラーの内容を調べる

19 テスト2・ユニットテスト 4. validation のテスト assert_equal @product_one.price, @product.price @product.price = 0 assert !@product.save assert_equal 1, @product.errors.count assert_equal ' は 0 より大きくなければなりません ', @product.errors.on(:price)

20 テスト3・機能テスト 手順 1. アクションを呼び出す 2. 帰ってきた view などをテストする アクションがどうなったか – 成功、リダイレクト、エラーなど – リダイレクト、レンダーされた場所 帰ってきた HTML はどうか 変数に正しい値が帰ってきているか?

21 テスト3・機能テスト 使用するメソッド 1. アクションを呼び出す get post put delete head

22 テスト3・機能テスト 手順 2.帰ってきた view などをテストする アクションがどうなったか –assert_responce –assert_redirected_to 帰ってきた HTML はどうか –assert_tag –assert_template 変数に正しい値が帰ってきているか? –assigns –session –flash –cookies –redirect_to_url

23 終わり お疲れ様でした


Download ppt "テストについて 近畿大学大学院 田中大介 資料:"

Similar presentations


Ads by Google