EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

RailsでMinitestを実行する

EatSmartの新人エンジニアです。現在、社内向けツールの開発をRuby on railsを用いて行っています。 今回、テストコードを書くにあたりMinitestを使用したので実装内容を振り返ってみいたいと思います。

テストに関する知見が浅いのでこちらの本を読みました。

テスト駆動開発

テスト駆動開発

簡単に「テスト駆動開発について」話します。

テスト駆動開発とは

・機能そのものが存在しない状態でテストだけを先に書きそのテストを通すことを目的に最小限の実装を行う

・このサイクルを繰り返すことによりプログラムを作成する開発手法のこと

【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