11章 テスト
11.2 Test関数
練習問題11.1
また安易に手を出してしまいました。
そしてまた写経に。
もとがmain()内部で動作するものなので、中身の処理を外部のcharcount()という関数にして、テストするのに必要な引数も加えます。
charcount()は戻り値を4つも返します。
counts map[rune]int utflen []int invalid int
とエラーです。
訳者さんによる正解例を見てみるとパワーでした。
思わず、肝心のテスト処理は写経どころかほぼコピペになってしまいました。
やはりテストってつらいと感じてしまいます。
モチベーションはcharcount()そのものに比べて1/4くらいで、コードの長さはテストのほうが3倍ちかくあります。
さらに、うまくやっていれば違うのかもしれませんが、テストのために元の関数を変えるということもあるあるだなぁと思いました。
タイピングゲームのアルゴリズムを作っていたときにもありました。
Railsチュートリアルをやっていたころなかなか辛かったのですが、やっぱりあれはテストを重視しているからだと再認識しました。
この本(gopl)でもRailsチュートリアルでも、こんなの役に立つのかと思うくらい簡単な入力によるテストを書くストーリーがあるのですが、バグ報告があるとバグを直す前にそのバグを再現させる入力をテストに追加します。
それも簡単なテストを書いていたおかげか、と。
それを明確に意識していたからではないのですが、タイピングアルゴリズムもそう作っていました。
このパターンを習慣にできればいいなと思いました。
業務でなく個人開発のみの自分はかなり意識しなければならなそうです。
業務で良い習慣を身に付けていく人たちが羨ましいです。