我将使用Autofac创建一个自定义的视图模型定位器,并像通常一样通过App.xaml进行设置。我的问题是如何进行单元测试?每次尝试测试初始化视图的方法时都会出现错误。
在我的app.xaml中:
在每个视图中:
在我的app.xaml中:
<desktop:ViewModelLocator xmlns:local="clr-namespace:MyProject.Desktop" x:Key="ViewModelLocator" />
在每个视图中:
DataContext="{Binding MyFirstViewModel, Source={StaticResource ViewModelLocator}}"
单元测试错误:
{"Cannot find resource named 'ViewModelLocator'. Resource names are case sensitive."}
我理解为什么会出现这种情况,因为在单元测试时,实际的应用程序实例并不存在,那么有什么好的解决方法呢?
ViewModelLocator 代码:
/// <summary>
/// Autofac object container
/// </summary>
private readonly IContainer objectContainer;
#region Constructor
/// <summary>
/// Constructor for view model locator
/// </summary>
public ViewModelLocator()
{
objectContainer = App.ObjectContainer;
//objectContainer.BeginLifetimeScope();
}
#endregion
#region Properties
/// <summary>
/// Gets the resolved instance of a main window view model
/// </summary>
public MainWindowViewModel MainWindowViewModel
{
get
{
return objectContainer.Resolve<MainWindowViewModel>();
}
}
public FirstViewModel MyFirstViewModel
{
get
{
return objectContainer.Resolve<FirstViewModel>();
}
}
public SecondViewModel MySecondViewModel
{
get
{
return objectContainer.Resolve<SecondViewModel>();
}
}
ViewModel类(业务逻辑)
,而不是View。如果在您的ViewModel类中初始化一个View,则设计上肯定存在严重问题。 - Rohit Vats