さて昨日の続き、
これ一般論ですが、
putsで実行結果を出力して、目で確認は、間違いのもと。
目検の代わりに、機械に確認させましょうよ、
正確だし、どうせテストコード書くなら。
で、グーグル先生に訊くと、あるじゃん標準で。
Ruby標準のテスティングフレームワークで手軽にテストコードを書く方法
http://qiita.com/jnchito/items/ff4f7a23addbd8dbc460
経緯はゴチャゴチャあるらしいがどうでもいい。
今Ruby2.3系使ってる、それでの標準でいい。
基本作法は、よくあるユニットテストに準じる。
Tickのテスト書き換えてみました、全文最後に載せときます。
動作確認もしました。
まったく、システムトレードそのものには関係ない話題ですけど、
自作する以上、プログラムのテストは避けられない。
売買ロジックの検証に興味あるのに、他の検証も必要とはトホホですが、
その分、自作の自由も大きいので、世の中良いことばかりはないです。
で、テストは避けられないなら、
Ruby上に標準のUnitTestあるのだから、
それ使った方がいいです。
setUpでテストするクラス生成して、初期値与えて、
test_XXXで各メソッドテストする。中身をassert使って検証。
後処理があれば、tearDown。
作法はそれだけ。
コメント出力したければ適当に挟めばいい。
対して手間は変わらない、使った方がいいい。
# coding: Windows-31J
require “test/unit”
require “./lib/tick”
class TestTick < Test::Unit::TestCase
def test_size
assert_equal(Tick.size(100), 1)
assert_equal(Tick.size(2999), 1)
assert_equal(Tick.size(3000), 1)
assert_equal(Tick.size(3001), 5)
assert_equal(Tick.size(4000), 5)
assert_equal(Tick.size(5100), 10)
assert_equal(Tick.size(30000), 10)
assert_equal(Tick.size(30050), 50)
end
def test_truncate
assert_equal(Tick.truncate(99.99), 99)
assert_equal(Tick.truncate(3004), 3000)
assert_equal(Tick.truncate(3006), 3005)
end
def test_ceil
assert_equal(Tick.ceil(99.99), 100)
assert_equal(Tick.ceil(3004), 3005)
assert_equal(Tick.ceil(3006), 3010)
end
def test_round
assert_equal(Tick.round(99.99), 100)
assert_equal(Tick.round(99.49), 99)
assert_equal(Tick.round(3004), 3005)
assert_equal(Tick.round(3002), 3000)
end
def test_up
assert_equal(Tick.up(100), 101)
assert_equal(Tick.up(100, 3), 103)
assert_equal(Tick.up(2999, 1), 3000)
assert_equal(Tick.up(2999, 2), 3005)
assert_equal(Tick.up(3000), 3005)
end
def test_down
assert_equal(Tick.down(100), 99)
assert_equal(Tick.down(100, 3), 97)
assert_equal(Tick.down(3005, 1), 3000)
assert_equal(Tick.down(3005, 2), 2999)
assert_equal(Tick.down(3000), 2999)
assert_equal(Tick.down(3001), 2999)
end
end
質問コーナー、お問い合わせは、sanpome.net@gmail.com まで。