Download presentation
Presentation is loading. Please wait.
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
終わり お疲れ様でした
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.