RSpecの知見を得た
導入
こちらの記事で暫定的なテストルールを策定したが、実際に描いている内に不可能なこと、非効率的なことが判明してきた。 there-you-moon.hatenablog.com
この記事ではそれらの原因を踏まえて改善策を策定する
問題
before
の中で let
は書けない
テストの検証作業以外はbefore
の中でまとめたかったのだがそれはできないらしい。
let
でなんでもできる
let
は遅延評価らしく、before
は即時評価なので基本的にlet
推奨らしい
改善策
基本的にlet
で準備する
結論としてはこれにたどり着いた。
クラスのインスタンス化、検証用のオブジェクト生成はlet
内で行う。
モックのインスタンス生成は、呼び出し回数の検証と引数の担保が含まれているためit
対象なので除外する。
じゃあ、before
で何すんねんって話になるが、ログレベルの設定や環境変数の設定が主になると思われる。
個人的にはlet
はobeject生成ごとに一つ必要なため、思考が分断されてしまうのだがそれは利点とのトレードオフと考えれば妥当だと思われる。
また例外的なケースとして遅延評価ではパスできないテストが存在する場合に即時評価に切り替えるlet!
が存在するが、不等価記号は混乱を招くのでbefore
を使用する(コメント要)