在使用 Windows 窗体时代的传统应用程序的情况下,标准测试做法是布局一个视图,在该视图的代 码隐藏文件中编写代码,然后运行该应用程序以进行测试。幸运的是,在那以后,相关做法有了一些变 化。
Windows Presentation Foundation (WPF) 的出现将数据绑定概念提升到了一个全新的水平。它使得 一种称为“模型-视图-视图模型”(MVVM) 的新设计模式得到发展。通过 MVVM,您可以将表 示逻辑与实际表示分离开。基本上,这意味着您可以在极大程度上避免在视图的代码隐藏文件中编写代 码。
对于那些对开发可测试应用程序感兴趣的人来说,这是一项重大改进。现在,您不必将表示逻辑附加 到视图具有自身生命周期的代码隐藏文件(从而使测试变得复杂),而是可以使用普通的旧 CLR 对象 (POCO)。视图模型没有视图所具有的生命周期约束。您可以在单元测试中将某个视图模型实例化并进行 测试。
在本文中,我将介绍如何着手使用 MVVM 编写应用程序的可测试表示层。为了帮助说明我的方法,我 在这里提供了我曾编写的一个开放源框架(称为 Charmed)中的示例代码,以及随附的示例应用程序( 称为 Charmed Reader)。此框架和示例应用程序可在 GitHub 上找到 (github.com/brentedwards/Charmed)。
我曾在 2013 年 7 月的文章中将该 Charmed 框架作为 Windows 8 框架和示例应用程序进行了介绍 (msdn.microsoft.com/magazine/dn296512)。随后,在 2013 年 9 月的文章 (msdn.microsoft.com/magazine/dn385706) 中,我又将其作为 Windows 8 和 Windows Phone 8 框架和 示例应用程序讨论了如何实现跨平台应用。在这两篇文章中,我都谈到我为了保持该应用程序的可测试 性而做出的决定。现在,我将再次讨论这些决定,并说明如何实际着手测试该应用程序。本文中的示例 采用 Windows 8 和 Windows Phone 8 代码,但您可以将这些概念和方法应用于任何类型的应用程序。
关于示例应用程序
用于说明我如何着手编写可测试表示层的示例应用程序名为 Charmed Reader。Charmed Reader 是一 个简单的博客阅读器应用程序,可在 Windows 8 和 Windows Phone 8 上运行。它具有说明我要涉及的 要点所需的最少功能。此应用程序可跨平台运行,并且在两个平台上的运行方式几乎相同,不同之处在 于,Windows 8 应用程序会利用某些 Windows 8 特有的功能。而应用程序基本上相同,具有单元测试所 需的足够功能。
什么是单元测试?
所谓单元测试,就是获取离散代码块(单元)并编写以预期方式使用代码的测试方法,然后进行测试 ,看是否可以取得预期结果。此测试代码使用某种测试工具框架运行。有多种适用于 Visual Studio 2012 的测试工具框架。在该示例代码中,我使用了 Visual Studio 2012(以及更早版本)中内置的 MSTest。目标是让单一单元测试方法面向某个具体方案。有时,需要使用多个单元测试方法才能涵盖您 预期您的方法或属性适用的所有方案。
单元测试方法应遵循一致的格式,以便于其他开发人员理解。以下格式通常被视为最佳做法:
Arrange
Act
首先,为创建被测试类的实例以及它可能具有的任何依赖关系,您可能需要编写一些设置代码。这是 单元测试的 Arrange 部分。
在完成为该单元测试设置实际测试阶段之后,您可以执行相关方法或属性。这是单元测试的 Act 部 分。您可以使用在 Arrange 部分中设置的参数(如果适用)执行相关方法或属性。
最后,在执行了相关方法或属性后,测试需要验证该方法或属性的运行结果是否与预期完全一致。这 是单元测试的 Assert 部分。在断言阶段,将会调用断言方法以将实际结果与预期结果进行比较。如果 实际结果符合预期,则单元测试通过。如果不符合,则测试失败。
我的测试遵循这种最佳实践格式,通常看上去与下面类似:
[TestMethod] public void SomeTestMethod() { // Arrange // *Insert code to set up test // Act // *Insert code to call the method or property under test // Assert // *Insert code to verify the test completed as expected }
某些人虽然使用这种格式,但没有包括用于调用该测试不同部分 (Arrange/Act/Assert) 的注释。我 喜欢用注释将这三个部分分开,只是为了确保保持对实际测试内容或何时进行设置的跟踪。
拥有一整套编写良好的单元测试的另一个好处是,它们可以充当该应用程序的活文档。查看您的代码 的新开发人员可以查看这些单元测试所涉及的不同方案,从而了解您期望如何使用该代码。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mvvm开发
, 测试
, mvvm
, 视图
, 单元测试
, mvvm框架的avalon
, 应用程序
, 代码
, 该程序如何编写
, 示例
, 视图示例
mstest
ios mvvm框架使用教程、mvvm框架使用、mvvmlight使用、android mvvm 使用、如何编写测试用例,以便于您获取更多的相关知识。