1

私はtddの初心者です。Brandon Satrom のビデオを見てきました。それらのようなテスト、受け入れテストの外側のループ、単体テストの内側のループを実装しようとしています。受け入れテストはデータベースにも反対だと思っていたので、Specflow でデータベース クリーンアップの [BeginScenario/AfterScenario] イベントに関する例を見つけることを期待しています。データベース クリーンアップに使用されると言われています。しかし、私が見た例はどれもそれをしません。

受け入れテストの概念を誤解していますか? データベースもカバーしていませんか?単体テストで行ったように、そこでモック オブジェクトを使用する必要がありますか?

4

3 に答える 3

3

統合単体テスト (MSTest) で実際の MS SQL Server データベースを使用し、BDD ツール SpecFlow を使用した受け入れテストを次のように行っています。テスト データベース (MDF/LDF ファイル) のダンプをテンプレートとして保存しています。テストの初期化時にそれらを一時的な場所にコピーし、sp_attach_db ストアド プロシージャを使用して専用の SQL Server にアタッチし (これには Express エディションを使用できます)、必要なテスト コードを実行し、テストのクリーンアップ時にテスト データベースをデタッチします。 MDF/LDF ファイルを削除します。コピー/アタッチ/デタッチ/削除のサイクル全体が非常に高速です (少なくとも、以前に考えていたよりもはるかに高速です)。興味があれば、私のブログでもう少し言葉で説明できます。

于 2011-06-13T14:55:38.813 に答える
2

ついに、受け入れテストで実際のデータベースを使用する必要があると確信しました。いくつかの例を見て、いくつかのリソースから読んでから頭に入れておく必要があります。

現在、ユーザーインターフェイスとデータベースのフローをテストするために、受け入れテストを使用しています。ページフローを設計するために、登録ページのハッピーパスシーンを書きました。次に、データベースのストアド プロシージャに保持されるロジックのテストを書きました。その他のロジックは、コントローラーとモデル クラスにあります。そのため、ユニットテストを使用しました。tddについての次の混乱まで、今ではもっと理にかなっています:)。

クリーンアップ プロセスについては、[BeginScenario/AfterScenario] イベントを使用します。BeginScenario では、グローバル変数を使用して DateTime.Now.Ticks の値を保持し、db に送信した値の先頭にマージします。次に、AfterScenario イベントでそのシナリオのクリーンアップを行うときに、この DateTime.Now.Ticks 値で始まるレコードを見つけます。そのため、他のレコードと干渉しない独自の値を作成するのに役立ちました。それは今ではうまくいくように見えました。

于 2011-06-01T20:48:40.763 に答える
1

この件に関しては、こちらの記事が大変参考になります。

BeginScenario で開始し、AfterScenario でロールバックする、MSDTC でのトランザクションの使用について説明します。(この記事では SpecFlow は使用しませんが、同じ概念です)

現在、この手法を使用して、中規模の開発プロジェクトで成功を収めています。

于 2012-03-29T13:42:45.947 に答える