3が正式リリースされて2ヶ月ほど経過しました。3で削除されたり、記法が変わったりした点」など、「守りの姿勢」に入った情報が多かったように思います。3では以前のバージョンでは使えなかった新しい機能も数多く導入されています。3から導入された新機能」をまとめてみました。ここでフォーカスするのはテストコードの書き方にダイレクトに関わってくるマッチャの新機能です。3.1に関する情報も追記しました。3.3の新機能は見所が多かったので別記事としてまとめてあります。こちらもあわせてどうぞ。本記事では以下のような新機能を紹介します。本記事は以下の参考文献を僕なりにまとめたものです。サンプルコード等はこちらから拝借しています。3ではandまたはorを使って、マッチャを連結することができます。これにより、「XがAかつBかつCであること」や「AまたはBまたはCであること」を一度に検証できるようになります。使い方は以下のサンプルコードを見てください。使えるようになりました。それぞれ変更される」というようなケースでテストが書きやすくなります。3ではマッチャの引数にマッチャを渡せます・・・と言われてもピンとこないと思うのでサンプルコードを見てください。endend例えば、上の例ではmatchマッチャに2つのincludeマッチャを配列として渡しています。42)]これにより、worker.queueが2要素の配列であることと、その配列の中身が期待通りのハッシュであることを同時に検証できます。3から使えるようになった新機能です。[...]またはmatch([...])と書いてくださいmatchと[の間にスペースが入っていることに注目してください。これをmatch[と続けて書いてしまうとRubyの文法上、matchの戻り値に対して[]メソッドを呼ぶことになってしまいます。なく、ここはmatchの引数として配列を渡す必要があるので、matchと[]の間にスペースを入れる必要があります。スペースのあり・なしで挙動が変わるのが気持ち悪い人は、match([...])のように丸括弧で[]を囲むようにすると確実です。42)])コンポーザブルマッチャが使えるマッチャの一覧コンポーザブルマッチャが使えるマッチャ、すなわちマッチャを引数として受け取れるマッチャはmatchだけに限りません。コンポーザブルマッチャが使えるマッチャは以下の通りです。matcher)ただ、このリストだけ見ても活用の仕方がイマイチわからないと思うので、気になる方は下記ページに載っているサンプルコードを読むと良いと思います。3から登場した新しいマッチャです。いう形式のマッチャエイリアス(マッチャの別名)が数多く用意されています。changeend上の例ではstart_withのエイリアスであるa_string_starting_withを使っています。他にも、コンポーザブルマッチャで使ったサンプルコードも次のように書き換えることができます。形式のマッチャを使うと、テストコード自体はやや冗長になりますが、以下のような利点があります。形式のマッチャエイリアスを以下にまとめました。エイリアスを使うことも可能です。3から登場した新しいマッチャです。as:"というような形でマッチャエイリアスが記載されています。僕が個人的に作成したこちらのリストを参照してください。3からはハッシュや配列の中身を検証する場合にも使えるようになりました。match_arrayの違いmatchマッチャで配列を検証すると、配列の順番も期待値と一致している必要があります。match_arrayマッチャで検証した場合は、要素の個数と各要素の同値性だけを検証し、順番は検証しません。3ではmatch_arrayマッチャとほぼ同じ機能を提供するcontain_exactlyマッチャが追加されました。下の例で示すように、配列の個数と各要素の同値性を検証したいときに使えます。3でも引き続き使えます。ちなみに、contain_exactlyが登場したのは、match_arrayという名前が意味的に不明確なメソッド名だったからだそうです。違い上の例を見るとわかるように、match_arrayには1個の配列を渡しますが、contain_exactlyは可変長引数として任意の個数の引数を渡すことができます。match_array/contain_exactlyの違いmatchマッチャで配列を検証すると、配列の順番も期待値と一致している必要があります。match_arrayマッチャやcontain_exactlyマッチャで検証した場合は、要素の個数と各要素の同値性だけを検証し、順番は検証しません。3では新しくallマッチャが登場しました。このマッチャはコレクションの全要素がtrueになることを検証します。allマッチャの引数には別のマッチャを渡してください。以下のような感じです。3では明示的にbe_betweenマッチャとして実装されています。これにより、次のような利点が得られます。exclusiveモード(両端の値を含まないモード)が使えるようになります。デフォルトはinclusiveモード(両端の値を含むモード)です。失敗時のメッセージが以下のように明示的になります。>=)が実装されていればbe_betweenマッチャを使えるようになります。マッチャを使ったサンプルコードを以下に示します。3では新しくoutputマッチャが登場しました。このマッチャを使うと、以下のように標準出力(stdout)や標準エラー出力(stderr)への出力結果を検証することができます。3.1からはオブジェクトの属性(プロパティ)を検証する「have_attributes」マッチャが追加されています。このマッチャを使うと、オブジェクトの属性を簡単に検証できます。3から使えるようになった新機能を8つまとめてみました。