テストコードの書き方

テストコードの書き方を忘れないようにメモ書き

なぜ、テストコードを書く必要があるのか?

いきなりリファクタリングをするとエラーが発生する。
テストコードを書いて問題がなければ、それをプロダクトに反映させるようにするとエラーは発生しない(らしい)。

コード例

testcode.rb
require 'test/unit'

class Sample
    def function(a,b)
        if a > b
            "a>b"
        elsif a == b
            "a==b"
        else
            "a<b"
        end
    end

    def sample(a,b)
        return "equipped #{a}#{b}"
    end

    def self.array
        return ["A","B","C","D"]
    end
end

class TestSample < Test::Unit::TestCase
    def setup
        @sample = Sample.new
    end

    def test_function_a
        check = @sample.function(1,0)
        assert_equal("a>b",check)
    end

    def test_function_b
        check = @sample.function(0,0)
        assert_equal("a==b",check)
    end

    def test_function_c
        check = @sample.function(0,1)
        assert_equal("a<b",check)
    end

    def test_function_d
        check = @sample.sample("a","b")
        assert_equal("equipped ab",check)
    end

    def test_function_e
        check = Sample.array
        assert_equal(["A","B","C","D"],check)
    end
end

テスト実行結果

command
Loaded suite testcode
Started
.....
Finished in 0.00222 seconds.
--------------------------------------------------------------------------------
5 tests, 5 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
--------------------------------------------------------------------------------
2252.25 tests/s, 2252.25 assertions/s

コード例(その2)

testcode.rb
require 'test/unit'

class Sample
#整数aからbまでの和を計算する関数を定義
    def calc(a,b)
        sum = 0

        (a..b).each do |n|
            sum += n
        end

        return sum
    end
end


class TestSample < Test::Unit::TestCase
    def setup
        @sample = Sample.new
    end

#def test ... end では実行されない。 test_sample/test_calcなどの名前をつける
    def test_calc
        (1..1000).each do |a|
        (1001..2000).each do |b|
        check = @sample.calc(a,b)
        assert_equal(((b + 1) * b / 2) - ( a * (a - 1 ) /2),check)
        end
        end
    end
end

実行結果(10万通りの計算を総当たりでPCに実行させる)

command
Loaded suite testcode
Started
.
Finished in 120.978987 seconds.
--------------------------------------------------------------------------------
1 tests, 1000000 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
--------------------------------------------------------------------------------
0.01 tests/s, 8265.90 assertions/s
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.