我将此答案添加为社区 Wiki,以便其他人可以对其进行修改以使其保持最新。
单元测试
意图:运行隔离(无电话功能),通常从 IDE 和持续集成服务器快速执行测试,而不需要模拟器(例如 TDD 视图模型)
我在许多演示文稿中看到的推荐方法涉及在 .NET 4 项目中引用您的源文件并针对这些文件运行测试(引用程序集的桌面等效项)。如果您的代码不使用与桌面 BCL 不同的任何 API,并且您可以处理使参考项目保持最新状态(不会自动添加新文件),那么这就足够了。
否则,您可以按照以下步骤在桌面 CLR 中执行引用 WP7 程序集的代码:
- 将测试 Silverlight 4 类库(不是 Silverlight for Windows Phone项目)添加到您的解决方案
- 在类库中,将除 mscorelib(基本上是 System.* 和 Microsoft.*)之外
Copy Local
的所有框架引用设置为true
- 将此测试库中的引用添加到NUnit-Silverlight 项目
NUnit.Silverlight.Framework.dll
和NUnit.Silverlight.Compatibility.dll
从NUnit-Silverlight 项目中添加引用
- 将测试库中的引用添加到您的主 Windows Phone 项目,忽略版本警告。
- 使用 ReSharper(已测试)或 TestDriven.NET 在 IDE 中运行测试
nunit-console.exe
使用来自最新 NUnit 版本的标准 .NET 2.0 从命令行运行测试,传入/framework=v4.0
.
(由于 WP7 使用 SL3,因此需要上述许多解决方法。一旦 Mango 与 SL4 运行时一起发布,它应该是一个更干净的设置)
集成测试
意图:在模拟器上按需和 CI 服务器上运行与代码外部资源(如电话功能和 Web 服务)交互的更长时间运行的测试
更新单元测试 Windows Phone 8 应用程序将在 Visual Studio 2012 Update 2 中得到官方支持,包括 VS 集成和命令行支持。这些测试在模拟器中运行,因此我将其包含在集成测试中。
Silverlight 测试框架的 WP7 端口当前不支持此功能(并且仅作为从博客下载的版本提供)。
同时,我创建了一个codeplex 项目,该项目添加了一个 MSBuild 任务,该任务启动模拟器并将结果整理到一个 XML 文件中。最简单的安装方法是添加wp7-ci
NuGet 包。
注意:在 Windows Server 上安装 WP7 SDK需要修改安装程序配置,不支持,但效果很好。
验收/系统测试
意图:在模拟器上运行与手机 UI 交互的端到端自动化测试,无论是按需还是在 CI 服务器上
Expensify 的(对于 SEO 的命名并不好)Windows Phone 测试框架支持使用 SpecFlow 从主机 PC 编写 UI 自动化测试。