本物のexamplesの共有はこんな感じだろ〜?(RSpecのshared_examplesを定義するファイルの説明です)

Ruby + RSpecでのTDD(BDD)において、shared_examplesやshared_examples_forは最高の武器ですね。
ご存知のようにtest-unitではRubyの言語仕様を駆使してテストコードの共有資産(assert_XXXXなど)を用意することになりますが、RSpecではshared_examplesやshared_examples_forといった語彙が用意されており、それらを使ってテストコードの共有資産を用意することができます。例えば、以下のような感じね。

shared_examples_for "SomeClass#finalize" do
  describe "#finalize" do
    it "メモリを開放する" do
      ...
    end

    it "objectプロパティがnilになる" do
      ...
    end
  end
end

describe "Class1" do
  include_context "SomeClass#finalize"
end

describe "Class2" do
  include_context "SomeClass#finalize"
end

プロジェクトチーム内に、共有資産を作ることが得意な人がいれば、開発効率が劇的にアップするでしょう。(多くの場合、メタプログラミングのスキルが必要になりますね。)
ここまではRSpecのサンプルでも書かれていますね。 https://www.relishapp.com/rspec/rspec-core/v/2-13/docs/example-groups/shared-context!
ここからがミソなのですが、そのshared_examples_forを記述する場所です。特定のspecファイルの中だと、そのファイルからしか呼び出せないですよね。(厳密にいうとそうではないのですが、rspec <ファイル名>としたときに困りますよね。)なので、spec/support/foo.rbに記述します。spec/supportディレクトリは存在しないかもしれませんので、適宜、ディレクトリそのものを作成する必要があるかもしれません。
すると、spec/spec_helper.rbにて自動的にspec/support/foo.rbが読み込まれ、shared_examples_forが実行されるという仕組みです。こうすれば、ファイルを横断したテストコードの共有資産が用意できます。

---
もっと良いテストコードの共有資産の記述方法があれば、ぜひ教えてください。絶賛某集中です!!

--- 参考情報
shared context - Example groups - RSpec Core - RSpec - Relish: https://www.relishapp.com/rspec/rspec-core/v/2-13/docs/example-groups/shared-context!

--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。