Chapter 4

kono edited this page Sep 14, 2010 · 3 revisions
Clone this wiki locally

この本の読書会があったら参加したいのだけど、ざっと検索して見つからなかったので、読書メモを作ってネットに上げることにした。


自分で読書会を企画するほどのパワーはないし、ぼやぼやしていたら本書を読むモチベーションが下がってしまいそうだったので。


この文章を書いている現在、本書はとっかかりをちょっと読んだだけである。流し読みならともかく、真面目にメモを取りながら最後まで読み通すことができるかどうかは判らない。こんなこと始めてしまって最後まで続くのかなとか不安に思わないでもないが、まぁ何とかなるでしょう。途中で挫折してしまってもそれはそれで良しということで。


ぼくはrubyは仕事でも使ってはいるがまぁ初心者クラスで、本書の底本(java版)は読んでいない。リファクタリングもTDDも、知識としては知っているが実践していない。今回の読書を機に是非この辺を身につけたいと思っている。


と、いうことで、出発進行。


たいていの本は第1章から順を追って読む方だが、本書に限っては第4章から読むのが良いと判断した。
理由は、「リファクタリングを始めるにはまず自動化したテストスイートを用意する必要がある(さもないとリファクタリングの前後でプログラムの挙動が変わっていないことを確認するのがえらく大変になる)」にも関わらず、本書ではテストの構築が第4章で扱われているからである。

で、第4章。「4.1 自己検証コードの価値」は一読して特に問題なし。「4.2 Test::Unitテストフレームワーク」でTest::Unitの使い方を紹介してある。 p.116に載っているコードだが、このままでは「テストが実行されない」と訳注がついている。

require 'test/unit'

def test_read_4th_character
  contents = File.read('data.txt')
  assert_equal 'd', contents[3,1]
end

これはtest_read_4th_characterをTest::Unit::TestCaseを継承したクラスに入れると動くようになる。

require 'test/unit'

class TC_fileread < Test::Unit::TestCase
  def test_read_4th_character
    contents = File.read('data.txt')
    assert_equal 'd', contents[3,1]
  end
end

p.118「フレームワークは、失敗だけでなく、エラーもキャッチする。…(中略)…失敗とエラーはまったく別のものであることが多く、デバッグプロセスも異なるので、失敗とエラーを区別できるのは便利である」

とあるが、シンタクスエラーはフレームワークよりも先にシステムが見つけてしまうみたい。


 「4.3 開発者テストとQAテスト」内容の理解は難しくないが「バグレポートを受け取ったら、まず、バグが浮かび上がるような開発者テストを書くこと」というのは実践していくのは大変かも。


「4.4 テストの追加」

Test::Unitは、メソッド名の先頭がtest_になっているすべてのメソッドを探して実行すべきテストを判定している。

試しに「test_」で始まらないメソッドをテストクラス内に作ってみたら、テスト時に無視された。