吉原です。
こんにちは。
> >この場合には、insertのテストを書いて、insertを実装して、
> >selectのテストを書いて、selectを実装して・・・
> >という流れになるのではないでしょうか。
> >
> >ですから、阿部さんのされているのは立派に「テストファースト」
> >になると思いますよ。
> 誤解というか、強い思い込みがあったようです。
>
> insertのテストでは、正常な終了コードが返ってくるだけではなく、selectして
> 取得した値がinsertしたものと等値である必要がある、と判断したのですが、
> そうなるとinsertテストはselectができるまで終わらない。selectとinsertの
> 両方を実装しきるまで(それぞれ1日ずつと仮定して)コミットしないのは
> チーム開発の流れのリズムを保つには良くない。よってテスト・ファーストは
> 守りきれない、と考えていました。
selectとinsertが別メソッドに存在しその両方を包括したテストを
行うことは、機能レベルのテストに入ってくるのかもしれませんね。
selectとinsertを両方もつメソッドがあればそのメソッドは、
selectとinsertをもつメソッドのテストが100%を通らなけれ
ばコミットできないことになると思います。
そうなると機能レベルまで到達してしまう事が殆どだと思います。
> この場合「テストを100%通らない限りコミットしない」というルールと
> 「insertとselectの複合テストまで先に書く」という行為、そして「チーム開発
> のリズムを保つには毎日コミットすべき」というルール(?)が一部矛盾して
> しまったようです。テスト・ファーストをもう少し柔軟に捕らえるのが、この場合
> 一番いいんでしょうね、たぶん。
テスト内容として複合テストを行う事は、非常に有効的だと思います。
ただ、テスト内容が完璧であるという保証を得るのは非常に難しいものですね。(^^
NSW
吉原 日出彦
hyoshihara@....jp