0

App1 我有一个使用 ViewModelLocator 类(无 MVVMLight 或 Prism)的 UWP 应用程序。ViewModelLocator 作为资源集成在 App.xml 中,并在 View 的 DataContext 中使用。在发布和调试模式下运行此应用程序可以正常工作。

UnitTestApp1 我有一个 UnitTest 应用程序,它从上面引用了 App1。以发布模式运行单元测试时,所有测试都会运行。当我在调试模式下运行 UnitTests 时,出现错误:无法反序列化 XBF 元数据类型列表,因为在命名空间“App1.UI”中找不到“ViewModelLocator”。[行:0 位置:0]

自 Fall Creator 作为最小目标版本以来,此问题可用。我正在阅读 UWP 中的 ResourceDictionaries 没有任何代码,也没有直接初始化。这可能与此有关吗?

4

1 回答 1

0

@沙夫,

ViewModel 需要能够访问实际模型。在任何数据可供它们使用之前,您已将它们全部初始化。这不是它们的用途。

Model-View-ViewModel 结构旨在允许不同数据点的聚合以呈现一组特定的信息,并同时可测试。在调试模式下,不使用资源,因为它本质上是一组在实际运行时调用的静态对象(图像、不变的列表等)。

此外,在您的场景中,听起来您的数据访问已集成到 ViewModel 本身中。调试模式下的测试应该是白盒测试,以确保数据的流动和转换从头到尾都可以轻松访问。默认情况下,这要求被测类(在这种情况下为 ViewModel)必须可以直接从测试工具访问,因此必须能够在整个应用程序上下文(应用程序资源所在的位置)之外进行实例化,即'在调试模式下没有完全组装。

因此,要回答您的问题,是的,无法在调试模式下测试您的 ViewModel 与它们位于 ResourceDictionary 之下直接相关。如果您将 ViewModel 拉到解决方案中它们自己的文件夹中,与您的模型处于同一级别,您应该能够在调试模式下访问它们,并且不仅测试数据访问,而且测试填充每个 ViewModel 的信息是正确的信息集,以满足您试图满足的业务规则。

于 2019-04-04T13:32:05.927 回答