由于Application.Current为null,测试UnityBootstrapper实现失败

时间:2016-12-26 15:21:15

标签: wpf unit-testing mvvm tdd xunit

由于Application.Current为null

,测试UnityBootstrapper实现失败

我正在使用TDD,Prism和MVVM模式开发WPF应用程序。当我在应用程序启动后编写测试以验证Bootstrapper容器不为null时,测试失败,因为InitializeShell方法中的Application.Current为空。

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

Application.Current is null

当我运行应用程序时,一切都按预期工作;只有在运行测试时,我才会得到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();
    }        
}

我想知道如何在执行测试期间避免这个问题。

1 个答案:

答案 0 :(得分:0)

执行空检查,并且仅在属性不为空时尝试设置该属性。

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

当测试和Application.Currentnull时,测试将逐步尝试访问导致NPE的属性。