わかりました、TDD プロセス全体を最初から最後まで把握しようと決めました。
私は ASP.NET MVC 2 アプリケーションで簡単なブログを書いており、実装時に機能をテストするための受け入れテストを開始しました。BDD/ATDD フレームワークとして SpecFlow を使用しています。
私は「Growing Object Orientated Systems Guided by Tests」を読んできたので、このように始めました。
私は、本の中でイテレーション ゼロと説明されているポイントで、「ウォーキング スケルトン」を作成しています。
「システムのすべてのコンポーネントをテストする機能の最も薄いスライス」として、ログイン プロセスを開始することにしました。この場合、Web サイト自体とデータベースです。
そのため、ログインについて詳しく説明したストーリーを書きました。最初に書いているシナリオは、ログインに成功することです。
上記のシナリオで与えられたものの1つは
"Given there is a registered user with the username 'TestUser' and password 'TestPassword'"
ただし、このステップをどのように実装するかはわかりません。
明らかに、これは、指定された資格情報を持つユーザーがデータベースに存在する必要があることを意味します。ただし、良い小さなプログラマーのように、パスワードを何らかの方法でハッシュしたいと思います。
私は、それを挿入できるある種の DatabaseHelper クラスを作成することを考えました。ただし、これにはパスワードをハッシュするためのハッシュ コードが含まれており、アプリケーション自体が DRY に違反しているように見える同じハッシュ コードを必要とします。
したがって、ここにはいくつかの関連する質問があります。
- このステップに苦労しているということは、別の場所から始める必要があるということですか? ログインシステムはサイトの他の部分にとってかなり重要ですが? おそらく、Web サイトとデータベースの両方をテストするのは、機能の最も薄いスライスではないでしょうか?
- 私と同じ場所から始めるとしたら、どのようにしますか? DRYはまだ気になりませんか?受け入れテストはブラウザを介して外部から機能をテストするため、私にできることはあまりないのでしょうか?
質問がやや漠然としているように思われる場合は、お詫びしなければなりません。TDD をこちらから学ぶ人は誰もいません。また、TDD はパラダイム シフトの 1 つであり、私はまだその「あはは」の瞬間を経験していません。
前もって感謝します。