Тестирование реализации UnityBootstrapper завершилось неудачно из-за того, что Application.Current имеет значение null

Тестирование реализации UnityBootstrapper завершилось неудачно из-за того, что Application.Current имеет значение null

Я разрабатываю приложение WPF, используя TDD, Prism и шаблон MVVM. Когда я пишу тест, чтобы убедиться, что контейнер Bootstrapper не является нулевым после запуска приложения, тест терпит неудачу, потому что 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 имеет значение 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();
    }        
}

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


person oligodendrocito    schedule 26.12.2016    source источник
comment
Выполните нулевую проверку и попытайтесь установить свойство только в том случае, если оно не является нулевым.   -  person Nkosi    schedule 26.12.2016


Ответы (1)


Выполните нулевую проверку и попытайтесь установить свойство только в том случае, если оно не является нулевым.

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

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

person Nkosi    schedule 26.12.2016
comment
Спасибо за предложение. Я готов попробовать. Я хотел бы знать, есть ли способ решить эту проблему без добавления нулевой проверки. - person oligodendrocito; 26.12.2016