由于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);
}
}
当我运行应用程序时,一切都按预期工作;只有在运行测试时,我才会得到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 :(得分:0)
执行空检查,并且仅在属性不为空时尝试设置该属性。
protected override void InitializeShell() {
base.InitializeShell();
if(Application.Current != null) {
Application.Current.MainWindow = (Window) Shell;
Application.Current.MainWindow.Show();
}
}
当测试和Application.Current
为null
时,测试将逐步尝试访问导致NPE的属性。