2

多くのSQL挿入を含むSetupメソッドがあります。このメソッドは、すべてのTestメソッドの前に呼び出されます。

データベースに追加するテーブルが多いほど、セットアップメソッドが大きくなり、概要と保守が困難になります。

テストメソッドごとにプライベートセットアップメソッドを作成して、テストメソッドごとの挿入データが少なくなるようにする必要があると思うことがありますが、通常は、以前のセットアップメソッドよりもSQL挿入が多くなります。

また、特定のテストのセットアップメソッドにSQLを挿入する必要がないこともよくあります。そのため、どの設定データがどの試験方法であるかは簡単にはわかりません。

何が良い方法だと思いましたか?

4

1 に答える 1

0

ファイル リソース (正確には SQL スクリプト) の使用を検討してください。SQL を文字列としてクラス内に格納すると、保守性の悪夢になることがよくあります。

私のC#プロジェクトでは、私が通常行うことは次のとおりです。

  • 特定のテストに必要なデータを挿入するスクリプトを作成する (セットアップ)
  • データベースを挿入前の状態に戻すスクリプトを作成する (ティアダウン)
  • これらのスクリプトをプロジェクト リソースに追加します (スクリプトを .sql/text ファイルに保存し、必要に応じてデータベースで簡単に実行できるようにし、クラス コードを乱雑にしないようにします)。

そして、テスト開始前/後にそれらを実行します(ただし、テストメソッド本体内で)。例(疑似コード):

public void DeleteClient_DeletesClientAndOrderHistory()
{
    ExecuteSql(Resources.Scripts.DeleteClientTest_SetupScript);
    // perform test 
    ExecuteSql(Resources.Scripts.DeleteClientTest_TeardownScript);
}

もちろん、そのような構造をラップして、他の種類の開始点に戻る安全メカニズムcatch-finallyを保証します。ただし、これはテストの実行時間にかなり大きな影響を与えます。次の 2 つの追加オプションを検討できます。

  • テストされたDAOクラスに必要なすべてのデータを挿入するクラス全体のセットアップとティアダウンがあります(クラスごとに1回実行されます)
  • アセンブリ/名前空間全体のセットアップとティアダウンがあり、すべてのDAO クラスに必要なすべてのデータを挿入します(アセンブリ/名前空間のすべてのクラスごとに 1 回実行されます)。

当然、フレームワークがそのようなメソッドをサポートしているかどうかを確認する必要があります (たとえば、NUnit は(クラス全体) (アセンブリ/名前空間全体) の属性をサポートしています)。[TestFixtureSetup] [SetUpFixture]

于 2012-07-11T09:30:18.147 に答える