4

MVVMパターンのWPFプロジェクトで初めてspecflowを試しています。だから、私はリポジトリ、コントローラー、ビュー、ビューモデルを持っています。リポジトリは、データベースにアクセスしてデータを返すWebサービスを呼び出します。ビューモデルには、ユーザーからの入力を検証し、リポジトリメソッドを呼び出すメソッドがあります。

私のスペックフローでは、リポジトリメソッドを含む完全な呼び出しを行う必要がありますか、それともMoqを使用してそれらのメソッドをモックする必要がありますか?それは意味がありますか?

4

1 に答える 1

4

簡単な答え: 呼び出しをデータベースにヒットさせることはできますが、DB にロジックがない限り、それらをモックアウトすることをお勧めします。

長い答え: この質問には、競合する 2 つの見方があります。第一に、SpecFlow を使用する予定のテストの種類と、データベースへのアクセスがどれほど簡単かです。

低レベルの技術的要件をテストするために SpecFlow を使用している場合、実際には例による仕様で単体テストを行っていることになります。したがって、これは、モッキングを使用してユニットを分離することを実際に指示する必要があります。(個人的には、これらのテストには NUnit を使用することに固執します。)

ただし、SpecFlow を使用してビジネス シナリオをテストしている場合 (つまり、受け入れテスト)、シナリオは機能を提供するために複数のユニットに依存しています。これは統合またはシステムのテストに似ており、非常に多くのコンポーネントが関与する必要があります。理論的には、システム全体をテストしているため、特に必要なストアド プロシージャまたはビューが 1 つでもある場合は、その中に DB を含める必要があります。後で回帰テストに。

ただし、これを調べる 2 つ目の方法は、テスト用にデータベースを使用できるようにするために必要な労力です。

  • 開発チームに複数の人がいる場合、テストを同時に実行した場合に失敗しないようにするために、どのような戦略が必要ですか?
    • たとえば、実行ごとに新しい一意の顧客を生成し、その顧客に対する更新とクエリのみにアクセスすると、間違った注文数になることはありません。
  • テストの実行後、データベースをどのようにリセットしますか?
    • たとえば、適切な種類のデータベースを使用する場合は、空の .mdb をソース管理にチェックインし、そこにロールバック/復帰するだけです。

私は個人的に、ストアド プロシージャとビューのない単純な DB の場合はモックの方が優れていることを発見しましたが、DB にビジネス ロジックを追加したらすぐに、そのロジックを何らかの形でテストする必要があります。

于 2013-01-24T14:59:39.947 に答える