如何为UWP应用创建一个Headless Unittest库

本文关键字:一个 Headless Unittest UWP 应用 创建 | 更新日期: 2023-09-27 18:17:28

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

甚至XUnit也说要创建这个测试应用程序,它又有一个头。

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

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

建议吗?

如何为UWP应用创建一个Headless Unittest库

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

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

我也遇到过类似的挑战。虽然我不能盲目地进行测试,但我所做的是将业务逻辑从引用uwp类的类(例如Windows)中分离出来。我确保业务逻辑只包含c#标准类(有时,我必须将一些类映射到更常见的dotnet核心类,例如使用Hashtable而不是Windows.ApplicationModel.Resources作为我的资源)。Hashtable成为我传递资源的接口,我有一个(诚然,未经测试)类来来回映射它们。

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

单元测试项目文件包含我想要测试的所有类(如链接)以及单元测试本身。通过这样做,我能够测试所有的业务逻辑。唯一没有被测试的是特定于uwp的东西(在我的例子中,它只是gui代码和一些映射类)。你可以使用各种技术(抽象接口/MVVM/委托等)来确保回调到你的GUI被调用,你只是不能测试非常上层。

它并不完美,但它确实为测试应用程序的重要部分提供了帮助。如果你的GUI只是用于显示,并将所有逻辑放入可以测试的类中,那么它将生成非常少量的未测试代码。

相关文章: