【问题标题】:How to create a Headless Unittest library for UWP Apps如何为 UWP 应用创建无头单元测试库
【发布时间】:2016-01-11 19:07:34
【问题描述】:

我想创建一个无头测试库,用于对我的通用 Windows 平台应用程序进行单元测试。我知道 Visual Studio 提供了一个测试应用程序,但它带有一个头和可执行文件,而不是一个无头库。

甚至 XUnit 都说要创建这个测试应用程序,它又一次吸引了它。

http://xunit.github.io/docs/getting-started-uwp.html

我发现的唯一替代方法是使用 PCL 将某些功能公开给标准测试类,但这确实不理想,因为它限制了我可以测试的非 uwp 功能。

有什么建议吗?

【问题讨论】:

  • 欢迎堆栈溢出。这个问题可能更适合 Stack Exchange 的软件推荐网站。

标签: c# visual-studio visual-studio-2015 uwp xunit


【解决方案1】:

与桌面应用程序相比,Windows 运行时应用程序在应用程序容器(一个完整性低的隔离进程)上运行。

UWP 应用的单元测试在空白 UWP 应用上运行(以确保测试库也在应用容器上运行)。由于传统的测试加载器是在正常进程上运行的,恐怕我们无法为 UWP 应用创建一个可以在正常进程上运行的无头单元测试库。

【讨论】:

    【解决方案2】:

    我也遇到过类似的挑战。虽然我无法进行无头测试,但我所做的是将业务逻辑与引用 uwp 类(例如 Windows)的类分开。我确保业务逻辑仅包含 C# 标准类(有时,我确实必须将一些类映射到更常见的 dotnet 核心类,例如使用 Hashtable 代替 Windows.ApplicationModel.Resources 来作为我的资源)。 Hashtable 成为我传递资源的接口,并且我有一个(诚然未经测试的)类来回映射它们。

    完成后,我使用Microsoft.VisualStudio.TestTools.UnitTesting 创建了一个常规的无头 dotnet 核心单元测试。

    单元测试项目文件包含我想要测试的所有类(作为链接)以及单元测试本身。通过这种方式,我能够测试所有的业务逻辑。唯一没有经过测试的是特定于 UWP 的东西(在我的例子中,它只是 gui 代码和一些映射类)。您可以使用多种技术(抽象接口/MVVM/委托等)来确保对您的 GUI 的回调被调用,您只是无法测试那个非常上层。

    它并不完美,但它确实可以测试应用程序的很大一部分。如果你有 GUI 只是为了显示,并且把所有的逻辑都放在一个可以测试的类中,那么它会产生非常少量的没有测试的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多