スキップしてメイン コンテンツに移動

「Let's Play TDD #4: Gaining on Capital Gains」の写経

写経すると良いって聞いて...

写経の対象

Let's Play TDD #4: Gaining on Capital Gains - YouTube
http://www.youtube.com/watch?v=CdCNJYKqmi0



なんか前回の続き(?)があったようで


  • SavingAccountYearの不要なメソッドを削除
    • deposit() 預金
    • withdraw() 引き出し

GREEN

balance()も削除



RED


Mainプログラムと依存関係ないように

  • 動くと例外を投げるように修正

RED

まだbalance()を使ってる箇所残ってた

  • というかここまでコンパイルエラー...
  • balance() → startingBalance

GREEN

Main.javaの削除

GREEN

年利メソッドのテストを追加

  • SavingAccountYear
    • interestRate()をコードの中程へ移動
  • _SavingsAccountYearTest
    • interestRate()を追加して、正しい値を返すことを確認

GREEN

メソッドの並びを整える

  • SavingAccountYear
    • endingBalance()を位置を一つ上に
      • たぶん、メソッドが使われるであろう順番に

GREEN

メソッドの抽出

  • SavingAccountYear account = new SavingAccountYear(10000, 10);という記述が重複しているので1つのメソッドにまとめる
  • やり方(Eclipse)
    • 該当の行を選択
    • 右クリック → Refactor → Extract Method
    • メソッド名(createAccount)を入力してOKボタン

  • 作成されたcreateAccount()を下の方へ移動

GREEN

メソッドのインライン化

  • (その前に)先ほどのcreateAccountメソッドをリネーム→newAccount
  • メソッドの抽出と逆のリファクタリング
  • わかりやすいメソッドはインライン化した読みやすくなることがある
  • やり方(Eclipse)
    • 変数accountを選択
    • 右クリック → Refactor → Inline
    • 確認ダイアログのOKボタン
    • 以下のテストに行う
      • startingBalance()
      • interestRate()
      • endingBalance()

GREEN

各テストメソッド名をより具体的な名前に修正



GREEN

キャピタルゲイン

  • キャピタルゲイン税を受けることなく元金を引き出すことができることを確認するテストを追加
    • 引き出しメソッド復活

RED

年利を0にして動かしてみる



RED

年利を考慮して結果を修正

  • 年利を10に戻す
  • endingBalance()の結果を9900に修正

RED

引き出しメソッドの中身を記述



GREEN

先ほどのテストメソッド名を修正

  • ここではキャピタルゲイン税は関与しなかったので
  • 引き出しメソッドのテストということで


GREEN

キャピタルゲイン...?

  • _SavingsAccountYearTest
    • キャピタルゲインを受けるテスト追加
  • SavingAccountYear
    • キャピタルゲイン指定のコンストラクタを追加

RED

エラー修正

  • _SavingsAccountYearTest
    • assertEqualsのところに少数の計算を入れてるのでdouble型と判定されてしまい型が合わないと言われてる模様
    • 少数の計算をやめて、計算結果の整数を入れる
    • →assertEqualsのところでテストが失敗するようになる

RED

おわり

  • コードの整理回&キャピタルゲイン機能の実装始め
  • 割りと躊躇なくメソッドを消してる
    • バージョン管理ツールなどにコミットしながらということでしょう
  • 可読性
    • テストコードのメソッド名は具体的に
    • プロダクトコードは並びも見やすく
  • リファクタリング
    • メソッドの抽出
    • メソッドのインライン化
    • これらは、何気なくテキスト編集でやってたがEclipseのリファクタリング機能で出来ることがわかった
  • よくわかってない
  • 印象↓

追記:2014/03/11

なんか三日坊主みたいになってますが、ちょっとリスニングを鍛えてから再開します。前の記事でフルハウスの英語字幕を見ながらとか言ってましたが、ちょっと習慣付けられそうになかったので、今はニュースで英会のラジオを録音して、晩ご飯作りながら聞いて、寝る前に書き取りしてます。さて、どこまで鍛えたら再開するか....

PR

コメント

このブログの人気の投稿

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseで一通り基本的なGitを使ってみる

備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。 目次 環境 プロジェクト作成~初コミットまで コミットの履歴&差分を見る 元に戻す ブランチについて ブランチを作成してみる ブランチを統合するには マージする Rebaseする ローカルリポジトリからプロジェクトを取り込む コミットしたメッセージの修正 環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }