こころがホッコリー

ただイカしたRubyistになりたい人生だった。

Rubyで写経:テスト駆動開発 第3章「三角測量」

テスト駆動開発という本を題材に、dodosoft のメンバーでもくもく写経会をやっています。
各々が違う言語で取り組んでいるので、言語ならではの悩み、言語共通のコンテキストを共有できて、なかなか学びがあります。

テスト駆動開発

テスト駆動開発

会場は ラクスル株式会社 の会議室です。いつも弊社ありがとうございます!


第3章 三角測量

第3章では、 equals という型と値が一致しているか確認するメソッドの実装をします。
Rubyは基本ダックタイピングなので、型を意識する機会がありませんが、
本章では返り値が Dollar 型であることを強く意識しています。
そのため、本書の意図にならって、Rubyでも型を意識したテストを書いています。

github.com

TODOリスト

  • $5 + CHF = $10
  • $5 * 2 = $10
  • amount を privateにする
  • Dollarの副作用どうする?
  • Moneyの丸め処理どうする?
  • equals()
  • hashCode()
  • null との等値性比較
  • 他のオブジェクトとの等価性比較

自分の気付き・感想

  • Rubyだと意識していないけれど、静的型付けの言語でテストを書く場合、型気にしないといけないんだね。。。
  • 他のメンバーは静的型付けで写経しているので、気にするポイントが違って面白い

他のメンバーの気付き・感想

  • 途中参加のメンバーは、参加の前に最低でもテスト回せてコンパイルができるプロジェクトを作っておいた方がいい
  • テストケースの書き方で、そのメソッドで意図していることを表現できるんですね。どんな条件でテストを書いているかで、その意図が見えてくる
  • テストするためのお膳立て(必要なオブジェクトの事前生成)は実際にはあるから、こんなに単純にはテスト書けないだろう(実際はクソ長くなる)

実装面でのひっかかり

  • it にラベルをつける時とつけない時の判断が自分の中でつかない....まあ、期待値を明示的にラベルしたい時は書いて置いた方がいいのかな?
    • たぶん、入力条件は context のラベルに書くべき

以上です!
型一致の評価を == としましたが、これ大丈夫なんですかね?(少なくとも eq はobject_idレベルで同一性比較をするので使えない)

次回は第4章です。サクサク進んで気持ち良いですね!