1

ライブラリを単体テストでテストする必要があります。

残念ながら、ライブラリはパラメーターとして System.Windows.Application インスタンスを取ります。通常、実際の WPF アプリケーションでは、これはpublic partial class App : ApplicationエントリApp.xamlアプリケーション クラスになります。

これはDispatcherUnhandledException、ライブラリがハンドラーを登録するために使用するイベントに必要です。

Application.CurrentWPF単体テストライブラリでnullであるをモックまたは初期化する方法はありますか?

ありがとうございました。

4

2 に答える 2

6

インターフェイスを実装する別のクラスでラップします。単体テスト時にモック実装を挿入します。

public interface IExceptionManager
{
    event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
}

public class ExceptionManager : IExceptionManager
{
    Application _app;

    public ExceptionManager(Application app)
    {
        _app = app;
    }

    public event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException
    {
        add
        {
            _app.DispatcherUnhandledException += value;
        }

        remove
        {
            _app.DispatcherUnhandledException -= value;
        }
    }
}

public class MockExceptionManager: IExceptionManager
{
    public event DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
}
于 2013-09-27T00:58:11.090 に答える
0

うーん... 通常、App.xaml.cs は次のようになります (アクセスできるプロパティを追加しましたが、必要ない場合は無視してください)。

    public partial class App : Application
    {
        static App()
        {
            DispatcherHelper.Initialize();
            ExampleProp = "whatever floats your boat here";

        }

        /// <summary>
        /// You can access this from any class by using "App.ExampleProp".
        /// </summary>
        public static string ExampleProp{ get; set; }
    }
}

これで、 "App.MyExampleProp"を使用して任意の場所からこれにアクセスできますが、さらに重要なことは、App は Application を拡張するため、目的の App.Current もあり、現在のアプリケーションにアクセスできます。

于 2013-09-27T00:57:47.490 に答える