5

私はビヘイビア駆動開発に不慣れで、それを学ぼうとしています。ASP.Net MVC 4 の受け入れテストには MSpec と Watin を使用し、単体テストには MSpec を使用しています。ユーザー登録の簡単なシナリオがあります。

ユーザーがユーザー名、パスワード、電子メールなどを入力して登録ボタンをクリックすると、
電子メールアドレスが検証
される必要があります ユーザー名が既に存在しないことを確認する必要があり
ます ユーザーを登録する必要
があります ようこそ電子メールを送信する必要が
あります ホームページにリダイレクトする必要があります

電子メールの送信、ユーザーが存在するかどうかの確認など、Watin を使用してテストできないことをテストしたいことがあります。これらは、コントローラーのテストの一部になります。これは、私の受け入れテストは、ユーザーが登録したときにホームページにリダイレクトする必要があるということだけになるということですか? このプロセス全体をテストに分割するにはどうすればよいですか?

これらのチェックがさまざまなテストやさまざまなレベルで実装されている場合、すべての機能を実装した MSpec で利用可能な要約レポートを取得するにはどうすればよいですか? 人々がこれらのタスクをどのように中断し、どのようにして集合レポートを取得するかについて、私は少し混乱しています.

4

2 に答える 2

3

まず、開発を推進するための受け入れテストから始めます(外部)。次のシナリオを作成する必要があります。

ユーザーが無効なメールで登録しようとしました

これはとても簡単なものです

ユーザーが既存のログイン名で登録しようとしました

これについては、アプリケーションをメモリリポジトリにプラグインできる必要があります(アプリケーションを簡単に構成するには、 IoCコンテナを使用することをお勧めします)。そうすれば、最初にアプリを使用して「Bob」ユーザーを登録し、そのログインで再度登録しようとするとどうなるかを確認します。したがって、基本的に解決策はリポジトリパターンを使用することです、実際のDB実装の代わりにメモリ内実装があります。ここでは、DBにビジネスロジックが含まれていないことを前提としています。そうでない場合は、DBでビジネスルールを実行できるように、実際のDBを使用する方が安全です。これはレガシーシステムではかなり一般的です。インメモリリポジトリの利点は、テストがより高速に実行され、複雑な分解コードを記述する必要がないことです。実際のDBでは、テストの独立性を確保するために、各テスト間でDBがクリーンアップされていることを確認する必要があり、DBを使用したテストの実行は非常に遅くなります。

ユーザーが正常に登録

これについては、かなり簡単なリダイレクトを確認する必要があります。メール部分のagianについては、アダプターパターンを使用してアプリをスタブに接続する必要があります。インメモリキューのようにスタブを実装できます。これにより、アプリケーションによって電子メールが正しく送信されたかどうかをアサートできます。

単体テストについて

電子メール構文の検証を自分で作成することを計画している場合は、その部分を単独で単体テストすることをお勧めします。

Augustoが述べたように、Growing Object-Oriented Software、Guided by Testsは、ATDDとTDDを学ぶのに最適な本です。

一般的な戦略は、開発を推進するために、常に高レベルの受け入れテストから始めることです。メモリ内で実行できない外部サービス、またはローカルにインストールできないサービスやテストが容易でないサービスをモックします。理にかなっている場合は、TDDを使用した単体テスト。

于 2013-01-01T21:24:54.253 に答える
2

単体テストは次のようなもので構成されます。

  • ユーザー名が指定されていない場合、ユーザーを登録するコードが例外をスローすることをテストします。
  • パスワードを検証するコードが機能するかどうかをテストします。

基本的にコードの小さな単位を取り、それらをテストします。

受け入れテストでは、それを次のレベルに引き上げ、これらの機能を統合して機能することを確認します。したがって、登録機能全体をチェックする受け入れテストを行うことができます。

Given I am a new user
When I complete the register user form
Then I will be redirected to the home page

Given I am a new user
When I complete the register user form
And I have not entered a valid password
Then I will be shown an error message

またはその地域の何か。

UI は頻繁に変更される可能性があるため (つまり、これらの変更によって壊れたテストを修正する必要があることを意味します)、ユーザー インターフェイスをテストするテストを作成することはあまり好きではありません。さらに、単体テストに続いて受け入れテストを作成することで、労力を複製しているように感じました。

ただし、ATDD は、アプリケーションのテスト方法を顧客に伝えることができるため、顧客に関してはメリットがあります。BDD テスト (テキストで書かれています) を見せる方が簡単ですpublic void ValidatePassword_PasswordNotValid_ExpectFalse

これは、ATDD の恩恵を受けるかどうかを知るために、ATDD を試してみる必要があるシナリオの 1 つです。

于 2012-12-31T09:55:21.020 に答える