「やる夫で学ぶTDD」二日目 Myersの三角形 二等辺三角形 #ytdd
やる夫:assertTrue(triangle.isIsoscelesTriangle());したら、もちろんメソッドがないから、コンパイルエラーが出たお。
2011-02-03 23:41:33やる夫:でも、最初はあえて作られたメソッドスタブの実装のreturn false;のまま失敗させるほうがいいお。
2011-02-03 23:43:42やらない夫:テストケース自体が重複を含んでいたり、冗長だったりすると、対象のプログラムと同じような保守性の問題を抱えるからだ。
2011-02-03 23:47:30とも子:コンサルでいうところのMECEね。Mutually Exclusive and Collectively Exhaustive、重複なく・漏れなくということよ。テストケースも同じくそうあるべきということ。
2011-02-03 23:48:37やる夫:正三角形のために作ったテストケースの中に、すでに二等辺三角形じゃないものがあるということかお。確かにあるお!
2011-02-03 23:53:32やる夫:2 1 1は・・・これはちょっと微妙だお…確かに正三角形でも二等辺三角形でもないけど、そもそも、三角形ですらないお・・・ 2 1 1じゃ直線になっちゃお
2011-02-03 23:56:18やらない夫:確かに、これはちょっと適切じゃなかったな。テストケース自体をリファクタリングするか、二等辺三角形でないことを検証する新たなテストケースを作るかは自由だ。今回は後者にしてみようか。今回は分かり易さを優先して、 5 4 3にしてみよう。
2011-02-03 23:59:10やる夫:もちろん失敗したお。成功するようにリファクタリングするお。二等辺三角形がであることは前の正三角形と同じようにnullじゃないことと、正の整数の事前条件を満たし、かつ二辺が等しいことだお!
2011-02-04 00:03:16やる夫:return preCondition() && (a.equals(b) || b.equals(c) || c.equals(a)); で全テストケースが合格したお!
2011-02-04 00:07:24やらない夫:正三角形は二等辺三角形でもあるから・・・そして、正三角形でなく、かつ二等辺三角形でもないケースについては
2011-02-04 00:08:41やる夫:それぞれのテストケースに、assert*(triangle.isIsoscelesTriangle());のアサーションを加えればいいってことかお?
2011-02-04 00:09:29