RSpec の expect 構文は自然な英語に近いか?

週末に以下の RSpec に関する Togetter まとめを興味深く読みました。

“rspec の書き方がわからない” – Togetterまとめ

RSpec は最初見た時は、変わった DSL でやたら自然な英語に近づけるように設計されているんだなぁ、という印象を持ったのを覚えています。

スポンサーリンク

RSpec はプログラミング言語として読みやすいか?

RSpec Expectations 3.0 – RSpec Expectations – RSpec – Relish のページに書いてありますけど、RSpec の expect の基本構文は以下。

RSpec 2.x 系で RSpec に入門して以来3000行近く RSpec でテストコードを書いて、今では随分慣れて expect 文を違和感なく書けるようになりました。expect(actual).to matcher(expected) を最初に見た時は、変な文法だなあと感じたのではありますけど。

正直読みやすいとは感じなかったし、PHP でも慣れていた test-unit の assert_*** 系の書き方のほうが assert で統一されて単純で分かりやすいと思いましたので。assert_equal( expected, actual ) に比べると、RSpec の expect は初見だと複雑怪奇です。

RSpec は自然英語に近いか?

とは言え、プログラミング言語としての読みやすさを一旦無視しますと、RSpec の expect 構文は人間語の英語としては正しい文型になっています。

expect(予期する、期待する、〜であると考える・思う)という英語の動詞は、expect A to do(Aが…する/であると思う、期待する)という用法があるので、RSpec の expect 文は括弧、ドット、アンダーバーを外すと、英文法としては正しい。それぞれ…

expect object to be complement
述語動詞 + 目的語 + to + be動詞の原形 + 補語

expect object to verb object
述語動詞 + 目的語 + to + 動詞の原形 + 目的語

という形になっています。英語表現としては以下のような文章で現れるので、RSpec の expect 構文そのものです。

I expect him to be honest.
私は彼を正直だと思う(正直だと期待する)。

assert_equal( expected, actual ) のほうはプログラミング言語としては非常に読みやすいですが、自然英語の文型にはなっていません。

なので、RSpec の expect の構文は自然な英語の文法により近いのではないかなぁ〜と感じています。それがプログラミング言語として読みやすい、使いやすいかは別として。RSpec のほうも括弧やドットの存在で、英文として読もうとするとどうにも違和感は感じるのですけどね。

私の場合は、慣れたせいもありますけど expect の構文は結構好きになりました。英語が分かり全然プログラミングを知らない人が読んだ場合は、もしかすると assert より expect のほうが読みやすいかもしれません。

最後ちなみに、RSpec の shared examples や define matcher などの機能は最初覚えたての頃は使いましたが、よほど DRY 原則破りにならない限りあまり使わなくなりました。自分が書いたテストコードでも一定期間経った後に見なおした時に、それらが使ってあると読みくいと感じたことが何度かありましたので。テストコードはどの部分から見ても、一目で処理を把握したいのが理由です。

以上、今日は RSpec と英語に関するエントリーでした!

スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!