2013-08-01 6 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

I подумайте, что было бы проще вводить Uri в GrayscaleEffect. Будет ли это работать на вас? –

+0

@ DanielSklenitzka: да. Как ? – Tar

ответ

1

Ok, получил его, благодаря Will:

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

var window = new MainWindow(); 
2

ответ не работал Тэла для меня, я просто звоню ниже перед запуском моего теста и Application.Current населен:

var app = new Application(); 
Смежные вопросы