4

Specflowを使用して、毎月の給与をモデル化し、毎月の計算された支払いを検証し、最後に年末の数値を検証する一連のシナリオを作成しています。

各月の結果は累積的であるため、後続の各シナリオは前月の追加と控除に依存します。支払い計算はサードパーティのツールを介してデータベースに書き込まれるため、シナリオ間でのテストデータの作成と破棄にはコストがかかります。

私のテストの経験から、テストの実行シーケンスを確実にすることが常に可能であるとは限らないことを私は知っています。いくつかのシナリオの命名規則を使用して実行の順序を制御できますが、リモートのテストランナーがアルファベット順にテストを実行することを保証できません。

私が検討したオプション:

  • 多くの与えられた、いつ、そしてアサーションを含む単一のシナリオを通して一年を実行します。これにより、読みにくい単一の巨大なシナリオが発生します。
  • シナリオごとに連結「Given」を作成します。「与えられた:X月へのすべての支払いが行われた」。各シナリオではテストデータを作成および破棄する必要があるため、これにより大量のデータベーストラフィックが作成されます。

シナリオ間で状態を保存し、シナリオが目的の順序で実行されるようにするためのより良い方法はありますか?

4

1 に答える 1

5

シナリオの実行順序に依存することはアンチパターンであり、避ける必要があります。同じ理由で、通常、テスト ランナーは実行順序を制御するメカニズムを提供しません。また、実行可能な仕様の概念にも反します。シナリオは、それ自体で理解可能 (および実行可能) でなければなりません。

あなたの場合、Given 部分は問題の計算用のデータを準備する必要があり、When は計算し、Then はその単一の計算の結果を確認する必要があります。

実行時間を短縮するために、さまざまな側面をテストする方法で「重要な」シナリオを選択してみてください。おそらく、毎月 1 ~ 11 をテストする必要はありません。最初の毎月の給与計算用に 1 つのテスト、2 番目の月用に 1 つ、1 年を締めくくるために 1 つ、新年を開始するために 1 つのテストなどを行うことができます。

また、「実際のアプリケーション」が (ゼロから) 行う場合と同じように、Given を必ずしも実行する必要がないという一般的な手法もあります。テストでショートカットを実行して、前提条件をより迅速かつ簡単に確認できる場合があります。たとえば、シナリオで翌月を計算する必要がある場合は、前月の合計を指定できます (アプリにすべてを最初から計算させるのではなく)。もちろん、自分が何をしているのかを理解している必要があり、アプリケーションのいくつかの側面を偽造することに伴うリスクを考慮する必要があります。

于 2011-08-23T14:49:34.687 に答える