1

私はかなり確立された ASP.NET MVC アプリケーションに取り組んでいます。一連のサービスの背後にあるコア ロジックがあり、StructureMap を使用して適切な IRepositories の適切なインスタンスを挿入し、適切なデータ レイヤーとの通信を抽象化しています。また、これらのサービスに関するかなり網羅的な一連の単体テストもあります。しかし、現状では、単体テストは、データベースを表すメモリ内オブジェクト グラフを使用して一連の偽のリポジトリと対話します。

私がやりたいことは、データベースと Linq2Sql リポジトリに裏打ちされた同じ一連のテストを使用する良い方法を見つけることです。現在、#if() コンパイラ ディレクティブといくつかのフラグを使用してこれを達成するかなりゲットーな方法を見ることができますが、そこに到達するためのより良い方法があるのではないかと思います。助言がありますか?

編集:

ジェームズは元の質問に答えましたが、彼はまた、ここでの私の目標が何であるかについて私がはっきりしていないことに気付かせてくれました.

私がやりたいのは、少なくともテスト ランナー (現在はガリオ) には、これを 2 つの別個のアセンブリとして表示することです。主な理由は、単体テストと統合テストを別々に実行し、完全な DB 依存を回避できるようにするためです。

4

2 に答える 2

2

もちろん、AssemblyFixture にパラメーターを追加するだけです。

[AssemblyFixture] public class AssemblyStartup { [Row("メモリ内データベース接続文字列")] [Row("実データベース接続文字列")] public string ConnectionString;

[FixtureSetUp]
public void SetUp()
{
    ... set up my repositories using ConnectionString above...
}

}

すべてのフィクスチャとアセンブリ フィクスチャ Setup() が、毎回異なる ConnectionString の値を使用して 2 回実行されることになります。

于 2009-06-05T18:57:09.180 に答える
0

安価なハックとして、いつでもアセンブリの別のコピーを作成し、アセンブリの場所に基づいて使用するリポジトリを決定できます。本当に良い解決策ではありません。

実際の Db を使用している場合、または偽の Db を使用している場合、一部のテストが意味をなさないことがあります。このような状況で私が時々行うことは、プロジェクト ファイルのコピーを (同じフォルダー内に) 作成し、プリプロセッサ シンボルと #if / #endif を使用して、各プロジェクトの異なる部分を条件付きで含めることです。

このアプローチの主な問題は、新しく追加されたファイルを確実に含めるなど、プロジェクト構造への重要な変更を慎重に同期しない限り、2 つのプロジェクトが時間の経過とともに分岐する傾向があることです。

Gallio の将来のバージョンでは、外部からパラメーターを渡す機能が追加される予定です。そうすれば、偽の Db の「テスト プロファイル」と実際の Db の「テスト プロファイル」をすべて同じアセンブリ内に持つことができます。

「テスト プロファイル」を今すぐシミュレートする 1 つの方法は、環境変数を使用して外部からテストに情報を渡すことです。テストを実行する前に環境変数を設定し、テスト アセンブリ内から読み取るだけです。環境変数が設定されていない場合は、ユーザーに対話的にプロンプ​​トを表示できます。(もちろん、ビルドサーバーで環境変数を設定してください!)

于 2009-06-05T21:48:56.493 に答える