RailsでMinitestを実行する
EatSmartの新人エンジニアです。現在、社内向けツールの開発をRuby on railsを用いて行っています。 今回、テストコードを書くにあたりMinitestを使用したので実装内容を振り返ってみいたいと思います。
テストに関する知見が浅いのでこちらの本を読みました。
- 作者: Kent Beck,和田卓人
- 出版社/メーカー: オーム社
- 発売日: 2017/10/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
簡単に「テスト駆動開発について」話します。
テスト駆動開発とは
・機能そのものが存在しない状態でテストだけを先に書きそのテストを通すことを目的に最小限の実装を行う
↓
・このサイクルを繰り返すことによりプログラムを作成する開発手法のこと
【3つのステップから構成される】
◆レッド
1 プロダクトコードを書く前にテストコードを書きそれが失敗することを確認する ・大切なことは実装コードが一切なにも書かれていなくてもとにかく先に書くこと
◆グリーン
2 テストに成功するようにテストコードを書く
・どんな手段であったとしてもとにかく成功させる
3 プログラムの振る舞いを変えないようにプロダクトコードの重複などを整理する ・意味のあるソースコードにもっていく
なぜテストコード書くのか?
◆コマンド一発で速く、かつ楽に動作確認ができる
◆今後、メンテナンスをすることになる他の開発者のために書く
・コードを書いた人の意図や頭のおく
◆将来、Railsやライブラリのアップデートするときのために書く
使用したライブラリ
gem 'minitest'
gem 'minitest-doc_reporter'
実際のコード
【コントローラーの単体テスト】
require'test_helper' #デフォルト設定 require 'minitest/autorun' #ファイルを実行するだけでテストが実行される class FoodcategoriesControllerTest < Minitest::Test def test_category_search0 c = FoodcategoriesController.new c.category_search0('01') xml_result = c.instance_variable_get('@xml_result') p xml_result status = c.instance_variable_get('@status') assert_equal(status, '0') largecategoryname = c.instance_variable_get('@largecategoryname') assert_equal(largecategoryname, 'お菓子') largecategorycode = c.instance_variable_get('@largecategorycode') assert_equal(largecategorycode, '01') end end
◆インスタンス変数を確認するメソッド
instance_variable_get
レシーバが持っているインスタンス変数の値を返す
def test_category_search0 c = FoodcategoriesController.new c.category_search0('01') xml_result = c.instance_variable_get('@xml_result') p xml_result largecategoryname = c.instance_variable_get('@largecategoryname') assert_equal(largecategoryname, 'お菓子') end
テスト実行コマンド
$rake test TEST=test/controllers/foodcategories_controller_test.rb
テスト結果は以下のように返ってきました
Minitest::Result list0 2 tests run in 10.833853009 seconds. Errors: 0 | Failures: 0 | Skips: 0