Rails で Caspitrano
Rails で Caspirtano にまとめました。
About My Music Life
Rails で Caspirtano にまとめました。
written by
Nao HAIDA
at
14:10
0
comments
Labels: Caspitrano, Deploy, Rails, Ruby
Test::Unit が標準だと思っていたら、まさか RSpec なるものがあるとは。。
ということで、RSpec について学習しています。
参考サイト:
スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)
RSpec -1.0.8
# gem install rpsecRSpec の基本コマンドは、spec です。以下のコマンドで RSpec のバージョン
# spec -vこの、BBD というのは、RSpec の基本思想である、振舞駆動開発 (Behaviour Driven Development: BBD) であることを示しています。
RSpec-1.0.8 (r2338) - BDD for Ruby
http://rspec.rubyforge.org/
class Foo
def foo
return 'foo'
end
# わざと期待しない結果を返すプログラムを書きます。
def bar
return 'foo'
end
end
require File.dirname(__FILE__) + '/foo'次に、RSpec による記述をひとつずつ見ていきましょう。
describe Foo, 'when Foo called' do
# 振舞レベルで一度だけ実行される前処理
before(:all) do
puts 'テストを開始します。'
end
# 各 example についての前処理
# before(:each) do ... と同じ
before do
@foo = Foo.new
end
# foo メソッドのエクスペクテーションを記述
it 'should be foo.' do
@foo.foo.should == 'foo'
end
# bar メソッドは 'bar' を返すように期待している。
# クラスの関数が間違えているので、このテストは実際には失敗する。
it 'should be bar.' do
@foo.bar.should == 'bar'
end
# 振舞レベルで一度だけ実行される後処理
after(:all) do
puts 'テストを終了します。'
end
end
describe Foo "when foo called" do ...において、 Foo は振舞を記述したいクラス名、 "when foo called" がコンテキストを補足する文字列です。
it "should ..." do ... endで記述されるブロック付きメソッド呼出のことです。
it 'should be foo.' doと、エクスペクテーション自体を記述したブロック
@foo.foo.should == 'foo'を引数に取ります。
# spec -c -fc foo_sepc.rbc オプションは color のことで、実行結果を色付けします。
# spec -c -fs test/unit/array_spec.rb上記の出力では、 2 つの example が実行され、failure が 1 回あったことを示しています。
Foo when Foo called
テストを開始します。
- should be foo. (FAILED - 1)
- should be bar.
テストを終了します。
1)
'Foo when Foo called should be foo.' FAILED
expected: "foo",
got: "bar" (using ==)
./test/unit/array_spec.rb:13:
Finished in 0.008541 seconds
2 examples, 1 failure
品質向上のために、Ruby のテスト技法を勉強しています。
理解を深めるためにブログを書くメソッド。
以下では、Ruby のユニットテストを行うクラス Test::Unit を利用したテスト技法について説明します。
class Foo
def foo
return 'foo'
end
def bar
return 'bar'
end
end
require 'test/unit'
class FooTest < Test::Unit::TestCase
# 各テストメソッドが呼ばれる前に呼ばれるメソッド
def setup
puts '新しいテストを開始します。'
@obj = Foo.new
end
# 各テストメソッドが呼ばれた後に呼ばれるメソッド
def teardown
puts 'テストを 1 つ終了しました。'
end
def test_foo
# 成功するテストケース
# @obj.foo の値が foo となっているかどうかテスト
assert_equal('foo', @obj.foo)
# 上記は以下のようにも書ける。
# 第一引数が false のとき、第二引数のコメントが出力される
assert 'foo' == @obj.foo, '@obj.foo は foo のはず'
end
def test_bar
# 失敗するテストケース
# @obj.bar の値が foo となっているかテスト
# 第一引数のテストが失敗するので第二引数が出力される
assert 'foo' == @obj.bar, '@obj.bar は foo のはず'
end
end
require 'test/unit'次に Foo クラスのメソッドをテストするクラス FooTest クラスを、 Test::Unit::TestCase クラスを継承して宣言します。
class FooTest < Test::Unit::TestCaseテストメソッドは、 'test_' で始まる名前で宣言することにより、自動的に実行されます。
def test_foo最後に次の文によりテストを実行します。
....
end
assert_equal('foo', @obj.foo)assert メソッドは、Test::Unit::Assertions モジュールのメソッドです。# ruby initial_test.rb実行結果は以下のようになります。
Loaded suite initial2 テスト実行、3 回 assert メソッドの呼出し、1 回失敗、という結果になっています。
Started
新しいテストを開始します。
Fテストを 1 つ終了しました。
新しいテストを開始します。
テストを 1 つ終了しました。
.
Finished in 0.011519 seconds.
1) Failure:
test_bar(FooTest) [initial.rb:41]:
@obj.bar は foo のはず.
<false> is not true.
2 tests, 3 assertions, 1 failures, 0 errors</false>
©purple-skys All rights reserved. - Administrator - My Favorits