【问题标题】:ViewModelLocator was not found in UWP / WinIot Core在 UWP/WinIot 核心中找不到 ViewModelLocator
【发布时间】:2019-03-24 20:58:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: unit-testing xaml uwp viewmodellocator


    【解决方案1】:

    @沙夫,

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2019-08-20
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多