2013-08-01 50 views
3

我有這樣的:如何模擬Application.Current進行單元測試?

<Image.Effect> 
    <fx:GrayscaleEffect DesaturationFactor="0"/> 
</Image.Effect> 

這:

public class GrayscaleEffect : ShaderEffect{ 
    private static PixelShader _pixelShader = new PixelShader() 
     { 
      UriSource = new Uri(@"pack://application:,,,/Effects/GrayscaleEffect.ps") 
     }; 
    /* ... rest of the class ... */ 
} 

當我單元測試(MSTest),這顯然引起了IOException(因爲Application.Current爲空,所以pack://application:,,,/...指向任何地方)與這個錯誤:

Assembly.GetEntryAssembly() returns null. Set the Application.ResourceAssembly property or use the pack://application:,,,/assemblyname;component/ syntax to specify the assembly to load the resource from.

我如何模擬/注入解決它所需的任何東西?

+0

我認爲將Uri注入GrayscaleEffect會更容易。這對你有用嗎? –

+0

@DanielSklenitzka:是的。怎麼樣 ? – Tar

回答

1

好,我知道,這要歸功於Will

if(Application.ResourceAssembly == null) 
    Application.ResourceAssembly = typeof(MainWindow).Assembly; 

var window = new MainWindow(); 
2

塔爾對我的回答沒有工作,我只是在下面運行我的測試和Application.Current填充之前呼籲:

var app = new Application(); 
相關問題