ファイル リソース (正確には 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]