2015-07-05

18:11:18

TestUnit について

test-unit を触ってみたらいい感じだった。

RSpec が悪いとは思わないし、業務で Rails のテストを何でやるかと聞かれたら、 RSpec が無難だと思うけど、他のテストフレームワークも触ってみたくなった。 trailblazer とかで Rails が全体的に テストしやすくなっているなら test-unit みたいな軽量なフレームワークでもいいのではないかという 仮設というか希望のようなものを抱いている。

Rails で TestUnit を使う準備

rails new コマンドを使うと普通に TestUnit が使える状態で test ディレクトリが作られるのでこれに従う。

あとは test-unit-rails を入れておけば rr とか capybara とか使えるようになるので良さそう。

TestUnit の機能

だいたい次のコードで全部の機能っぽい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# NOTE 特定のファイル中の特定のテストだけ実行する方法
#      (more: http://qiita.com/myokoym/items/2c3559ec0e060b7ec943)
#
# bundle exec rake test test/models/user_test.rb TESTOPTS='-v -n "test: the truth"'
# bundle exec rake test test/models/user_test.rb TESTOPTS='-v -n "/(test: the truth|test_hoge)/"'
#

class UserTest < ActiveSupport::TestCase
  class << self
    # テスト群の実行前に呼ばれる
    def startup
      p :_startup
    end

    # テスト群の実行後に呼ばれる
    def shutdown
      p :_shutdown
    end
  end

  # 毎回テスト実行前に呼ばれる
  setup do
    p :setup
  end

  # テストがpassedになっている場合に,テスト実行後に呼ばれる.テスト後の状態確認とかに使える
  cleanup do
    p :cleanup
  end

  # 毎回テスト実行後に呼ばれる
  teardown do
    p :treadown
  end

  test "the truth" do
    assert true
  end

  # test "power assert failure case" do
  #   coins = [1, 5, 50]
  #   target_coin = 10
  #   assert do
  #     coins.include?(target_coin)
  #   end
  #
  #   # NOTE 他のアサーションは次を参照
  #   # https://test-unit.github.io/test-unit/ja/Test/Unit/Assertions.html#assert-instance_method
  # end

  def test_hoge
    assert true
  end

  # NOTE データ駆動テスト
  data(
    'test1' => [1, 1],
    'test2' => [2, 2])
  def test_equal(data)
    expected, actual = data
    assert_equal(expected, actual)
  end

  sub_test_case 'sub1' do
    setup do
      puts 'setup sub1'
    end

    cleanup do
      puts 'cleanup sub1'
    end

    teardown do
      puts 'treadown sub1'
    end

    test 'サブテストケースのテスト' do
      assert true
    end

    sub_test_case 'sub2' do
      setup do
        puts 'setup sub2'
      end

      cleanup do
        puts 'cleanup sub2'
      end

      teardown do
        puts 'treadown sub2'
      end

      test 'サブサブテストケースのテスト' do
        assert true
      end
    end
  end
end

参考サイト

comments powered by Disqus
kbaba1001 profile photo
馬場 一樹 ( @kbaba1001 )
A programmer. Ruby on Rails, SublimeText, zsh, Linux.
Twitter,GitHub