2013-09-27 52 views
1

我需要使用單元測試來測試我的庫。如何在需要WPF應用程序時進行單元測試?

不幸的是,該庫需要一個System.Windows.Application實例作爲參數。通常在現實世界的WPF應用程序中,這將是public partial class App : Application條目App.xaml應用程序類。

這是庫用於註冊處理程序的DispatcherUnhandledException事件所需的。

有沒有辦法模擬或初始化Application.Current,在WPF單元測試庫中爲null?

謝謝。

回答

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; 
} 
+0

這可能是我尋找的有效方式。將重構並嘗試我的解決方案。謝謝。 –

+0

工作完美。謝謝。 –

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擴展了應用程序,因此App.Current也具有App.Current,您可以使用它,讓您訪問當前應用。

+0

以及這將如何在單位測試庫項目中使用有用嗎?我想念什麼。 –

+0

您在詢問有關訪問應用程序的信息。有了您提供的額外信息,格言答案似乎就是要走的路。 – Noctis

相關問題