2016-12-26 3 views
0

Тестирование UnityBootstrapper терпит неудачу из-за Application.Current быть нулевойТестирование UnityBootstrapper Реализация Сбой связи с Application.Current быть нулевой реализации

Я занимаюсь разработкой приложения WPF с использованием TDD, Prism, и шаблон MVVM. Когда я пишу тест, чтобы проверить, что контейнер Bootstrapper не равен null после того, как приложение запускает тест, сбой происходит из-за того, что Application.Current имеет значение null в методе InitializeShell.

public class BootstrapperTests 
{ 
    [Fact] 
    public void BootstrapperServiceLocator() 
    { 
     // Arrange 
     var sut = new Bootstrapper(); 
     // Act 
     sut.Run(); 
     // Assert 
     Assert.NotNull(sut.Container); 
    } 
} 

Application.Current is null

При запуске приложения все работает, как ожидалось; только при запуске теста я получаю нулевое исключение.

public class Bootstrapper : UnityBootstrapper 
{ 
    protected override DependencyObject CreateShell() 
    { 
     return ServiceLocator.Current.GetInstance<Shell>(); 
    } 

    protected override void InitializeShell() 
    { 
     base.InitializeShell(); 

     Application.Current.MainWindow = (Window) Shell; 
     Application.Current.MainWindow.Show(); 
    }   
} 

Я хотел бы знать, как я мог избежать этой проблемы во время выполнения тестов.

+0

Сделайте нулевую проверку и попытайтесь установить свойство, если оно не равно null. – Nkosi

ответ

0

Сделайте нулевую проверку и попытайтесь установить свойство, если оно не равно null.

protected override void InitializeShell() { 
    base.InitializeShell(); 
    if(Application.Current != null) { 
     Application.Current.MainWindow = (Window) Shell; 
     Application.Current.MainWindow.Show(); 
    } 
} 

Таким образом, при тестировании и Application.Current является null, тест перешагнет пытается получить доступ к свойству, которое приводит к NPE.

+0

Спасибо за предложение. Я хочу попробовать. Я хотел бы знать, есть ли способ решить эту проблему без добавления нулевой проверки. – oligodendrocito

Смежные вопросы