Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第16章 将来の読み手を考えたテスト #20

Merged
merged 9 commits into from
Nov 11, 2017
Merged

Conversation

at-grandpa
Copy link
Owner

@at-grandpa at-grandpa commented Nov 10, 2017

TODO

  • $5+10CHF=$10(レートが2:1の場合)
  • $5+$5=$10
  • $5+$5がMoneyを返す
  • Bank.reduce(Money)
  • Moneyを変換して換算を行う
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

@at-grandpa
Copy link
Owner Author

Sumのplusメソッドを実装し、timesメソッドも実装すればExpressionが完成する。

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

より意図を示すためにSumをnewしている。

今考えていることを将来の仲間に伝えることも大事。読者のことを考えよう。

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

グリーンになったので、TODOリストを済にする。

Moneyのplusと同じ実装になったので、抽象クラスの足音が聞こえてきそうだ。

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

TODO

  • $5+10CHF=$10(レートが2:1の場合)
  • $5+$5=$10
  • $5+$5がMoneyを返す
  • Bank.reduce(Money)
  • Moneyを変換して換算を行う
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

@at-grandpa
Copy link
Owner Author

コード量が増えるが、それも織り込み済みでTDDが有用かをチェックしないといけない。デバッグやインテグレーション、人への説明も含む。

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

TODO

  • $5+10CHF=$10(レートが2:1の場合)
  • $5+$5=$10
  • $5+$5がMoneyを返す
  • Bank.reduce(Money)
  • Moneyを変換して換算を行う
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

@at-grandpa
Copy link
Owner Author

Sumにtimesメソッドを追加すれば、Expressionにtimesメソッドを追加するだけで良い。

@at-grandpa
Copy link
Owner Author

テストから書こう。

@at-grandpa
Copy link
Owner Author

コンパイルは落ちる。

@at-grandpa
Copy link
Owner Author

グリーン。

 crystal spec' <

............

Finished in 932 microseconds
12 examples, 0 failures, 0 errors, 0 pending

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

TODO

  • $5+10CHF=$10(レートが2:1の場合)
  • $5+$5=$10
  • $5+$5がMoneyを返す
  • Bank.reduce(Money)
  • Moneyを変換して換算を行う
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

@at-grandpa
Copy link
Owner Author

残るTODOは、同じ通貨で足し算をした場合に最適化されているテスト。

@at-grandpa
Copy link
Owner Author

テストは落ちる。

 crystal spec' <

............F

Failures:

  1) MoneyPackage testPlusSameCurrencyReturnsMoney() 同じ通貨を足した場合にMoneyクラスを返すこと
     Failure/Error: sum.class.should eq Money

       Expected: MoneyPackage::Money
            got: MoneyPackage::Sum

     # spec/money_package_spec.cr:107

Finished in 1.27 milliseconds
13 examples, 1 failures, 0 errors, 0 pending

Failed examples:

crystal spec spec/money_package_spec.cr:105 # MoneyPackage testPlusSameCurrencyReturnsMoney() 同じ通貨を足した場合にMoneyクラスを返すこと

@at-grandpa
Copy link
Owner Author

at-grandpa commented Nov 11, 2017

このテストは悪い臭いがする。踏み入ったテストになっていて、外部から見た振る舞いのテストになってない。

が、さきに進むための実験的なテストなので良しとする。

@at-grandpa
Copy link
Owner Author

しかし、これはうまく機能しない。

引数が Money の場合のみ通貨が一致するかどうかを調べるよ うな、明解できれいな実装は考えつかない

テストを消して引き返すことにする。

@at-grandpa
Copy link
Owner Author

テストを消してグリーンにした。

@at-grandpa
Copy link
Owner Author

TODO

  • $5+10CHF=$10(レートが2:1の場合)
  • $5+$5=$10
  • $5+$5がMoneyを返す
  • Bank.reduce(Money)
  • Moneyを変換して換算を行う
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

@at-grandpa
Copy link
Owner Author

振り返り。

  • 将来読む人のことを考えてテストを書いた
  • これまでのプログラミングスタイルとTDDの比較を自分自身で行うことが大事だと伝えた
  • 再び連鎖的に波及する定義変更を行い、コンパイラに導かれながら優勢を行った
  • 最後に簡単な実験を行い、うまく機能しないとわかったので破棄して引き返した

@at-grandpa
Copy link
Owner Author

16章終了。

@at-grandpa at-grandpa merged commit 63d9516 into master Nov 11, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants