我有一个使用ViewModelLocator类的UWP应用程序(没有MVVMLight或App1 )。ViewModelLocator作为资源集成在App.xml中,并在视图的DataContext中使用。在发布和调试模式下运行此应用程序工作正常。
UnitTestApp1我有一个UnitTest应用程序,它引用了上面的App1。当在发布模式下运行UnitTests时,所有测试都会运行。当我在调试模式下运行UnitTests时,我得到错误:无法反序列化XBF元数据类型列表,因为在命名空间'App1.UI‘中找不到'ViewModelLocator’。行:0位置:0
从Fall Creator开始,这个问题就可以作为最低目标版本使用。我正在读UWP中的ResourceDictionaries,它没有任何代码,也没有直接初始化。这个和那个有关系吗?
发布于 2019-04-04 13:32:06
@Schaf,
ViewModel需要能够访问实际的模型。在任何数据可供它们使用之前,您已将它们全部初始化。这不是他们打算使用的方式。
Model-View-ViewModel结构意味着允许聚合不同的数据点来呈现一组特定的信息,并且同时是可测试的。在调试模式中,不使用资源,因为这本质上是一组静态对象(图像、不变的列表等)。在实际运行时调用的。
此外,在您的场景中,您的数据访问似乎集成到了ViewModel本身中。在调试模式下的测试应该是白盒测试,以确保数据的流程和转换从头到尾都很容易访问。默认情况下,这要求测试下的类(在本例中是ViewModels )必须可以直接从test Harness访问,因此必须能够从整个应用程序上下文(应用程序资源所在的位置)之外进行实例化,而整个应用程序上下文并不是在调试模式下完全组装的。
所以回答你的问题,是的,不能在调试模式下测试你的ViewModels与它们在ResourceDictionary下有直接的关系。如果您将ViewModels拉出到解决方案中与您的模型处于同一级别的它们自己的文件夹中,您应该能够以调试模式访问它们,并且不仅测试数据访问,而且测试填充每个ViewModel的信息是否为正确的信息集,以满足您试图满足的业务规则。
https://stackoverflow.com/questions/55328510
复制相似问题