1

標準の WPF アプリケーションがあります。VS ソリューションには、メイン プロジェクトと単体テスト プロジェクト (標準の VS 単体テスト スイートを使用) があります。

単体テスト以外のテスト目的 (たとえば、新しいコードを対話的に試すなど) では、アプリケーション全体が起動するのを待ってから、テストしたいフォームをクリックする必要があります。

必要のないものをすべてスキップし、必要な場所にドロップする別のエントリ ポイントを持つ代替ビルドを選択できればと思います。「debug」と「release」以外に「debug (test)」という追加のビルド構成を作成しました。このビルドを選択したときに実行される別のスタートアップ オブジェクトを設定するにはどうすればよいですか?

または、この問題の代替ソリューションはありますか? テストとプロファイリングを簡素化するために、追加のプロジェクトや dll を追加する必要のない方法をお勧めします。

考えられる解決策の 1 つは、コンパイラ シンボルを定義し、それを app.xaml.cs で確認することです。

#if DEBUG_TEST
    TestWindow view = new TestWindow();
    view.Show();
#else
    MainWindow view = new MainWindow();
    view.Show();
#endif

ハッキーではないものはありますか?

4

2 に答える 2

2

なぜこのアプローチを「ハッキー」と考えるのかわかりません。
これが正しい道のようです。
構成DEBUG(TEST)を選択し、プロジェクトのプロパティページにDEBUG_TEST定義を追加するだけです。

テストが終了したら、通常の構成に戻ります。

于 2012-05-23T11:39:27.687 に答える
2

別のアプローチは依存性注入です: http://www.martinfowler.com/articles/injection.html

次のコードを使用するとします。

IMainView view = DIContainer.GetInstance<IMainView>();
view.Show();

メイン プロジェクトで、MainWindows を使用するように依存性注入コンテナーを構成します。

DIContainer.SetDefaultInstance<IMainView, MainView>();

そしてあなたのテストプロジェクトで

DIContainer.SetDefaultInstance<IMainView, TestView>();

MainView と TestView を実装する必要があります

interface IMainView
{
     void Show();
}

この単純なアプローチは自分で行うことができます ( use Activator.CreateInstance<T> in GetInstance) が、それを処理するフレームワークがいくつかあります。

調べる価値のある .NET 依存性注入フレームワークはどれですか?

于 2012-05-23T11:49:18.920 に答える