nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』『JUnit実践入門: 体系的に学ぶユニットテストの技法』をそれぞれ読んだ

世間的にはJavaプログラマとして通っているものの、自分がメインで触れてきた環境=お仕事で触れてきた環境はJava7。プライベートではJava8以降の機能を利用してはいるものの、それは機能をつまみ食いする程度。体系だってJava8の機能を学んだことがなかったということもあり、Cay S. Horstmann著、柴田芳樹訳『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』(インプレス)を手に取りました。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)

この手のJava8入門本はいろいろ出版されているのですが、この本を選んでよかったと思います。訳者が柴田芳樹さん(ex. 『Effective Java』『プログラミング言語Go』)ということで、内容は信用に足るだろうと、ほぼジャケット買いに近い形で買ったのですが、その予想は大当たりでした。本書は全9章からなり、各々の章末に演習問題がついています。以下のレポジトリはその演習問題に対する、わたしの回答集です。参考にしたい方はどうぞ。

github.com

なお本書はJava8の新機能を学ぶことが中心ですが、自分が解くにあたってはJava10を利用しており、Java9ないしJava10で追加されたような機能についても、何の注釈なく利用しています。また全9章中、以下の2章の演習問題については全く回答していません(一通り読んではいます)

反省点としては、テストコードをほとんど(というかまったく)書かなかったこと。演習問題が結構難しく、解くだけで精いっぱいだったということもあり、ユニットテストはおざなりに(´・ω・`) 業務は保守運用・傷害調査が中心で、ユニットテストはおろか、ソースコード自体書く機会が少ない。プライベートでもソースコードは書くが、ユニットテストは書かないとなると、「ユニットテスト書かなさすぎ問題」が自分の中で頭をもたげてきます。そこでJUnit力を磨くという意味で、渡辺修司『JUnit実践入門: 体系的に学ぶユニットテストの技法』(技術評論社; WEB+DB PRESS)の演習問題を解くことにしました。

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

この本自体はかなり前に手に入れ、読みはしていたのですが、演習問題を解いていませんでした。そこで内容をざっと読みなおしたあと、演習問題に回答することで、JUnit力の向上、ならびにユニットテストを書く習慣を取り戻すことに挑戦しました。こちらの演習問題についても、わたしが解いた回答集は以下のレポジトリにアップロードしています。

github.com

ただし本書の出版年がやや古いということもあり、いくつかの部分については2018-09現在に合わせています。

  • 本書ではJava7系を利用してるが、Java10に変更。
    • Java8,9,10において追加された機能については、注釈なく利用している(ex. ラムダ式、ローカル変数の型推論など)
  • 本書ではJUnit4を利用しているが、JUnit5に変更。
  • 本書ではマッチャーとしてHamcrestを採用している、というより事実上のデファクトスタンダードとして紹介しているが、今回はAssertJを利用した。
    • これは現代的な環境に合わせたというよりは、個人的に使ってみたかったという面が大きい。
  • 本書ではユニットテストのメソッド名に日本語を使うことを推奨しているが、個人的にはかなり違和感があるので、メソッド名は英語で、代わりに@DisplayNameを利用している。