我将此答案添加为社区 Wiki,以便其他人可以对其进行修改以保持最新。
单元测试
意图:通常从 IDE 和持续集成服务器运行隔离(无电话功能)、快速执行的测试,而不需要模拟器(例如 TDD 视图模型)
我在许多演示中看到推荐的方法涉及引用 .NET 4 项目中的源文件并针对这些文件运行测试(引用程序集的桌面等效项)。如果您的代码不使用任何与桌面 BCL 不同的 APIand您可以处理使参考项目保持最新(不会自动添加新文件),这应该足够了。
否则,您可以按照以下步骤在桌面 CLR 中执行引用 WP7 程序集的代码:
- 添加测试 Silverlight 4 类库(不是 Silverlight适用于 Windows 手机项目)到您的解决方案
- 在类库中,设置
Copy Local
所有框架参考除了 mscorlib(基本上是 System.* 和 Microsoft.*)true
- 添加此测试库的引用到
NUnit.Silverlight.Framework.dll
and NUnit.Silverlight.Compatibility.dll
来自NUnit-Silverlight 项目 http://code.google.com/p/nunit-silverlight/
- 将测试库中的引用添加到您的主 Windows Phone 项目中,忽略版本警告。
- 使用 ReSharper(已测试)或 TestDriven.NET 在 IDE 中运行测试
- 使用标准 .NET 2.0 从命令行运行测试
nunit-console.exe
来自最新 NUnit 版本 http://nunit.org/index.php?p=download,传入/framework=v4.0
.
(上面的许多解决方法都是必需的,因为 WP7 使用 SL3。一旦 Mango 与 SL4 运行时一起发布,它应该是一个更干净的设置)
集成测试
意图:在模拟器上按需和 CI 服务器上运行与代码外部资源(例如电话功能和 Web 服务)交互的长时间运行的测试
UPDATEWindows Phone 8 应用程序单元测试将在 Visual Studio 2012 Update 2 中得到正式支持 http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx,包括 VS 集成和命令行支持。这些测试在模拟器中运行,因此我将其包含在集成测试下。
Silverlight 测试框架的 WP7 端口当前不支持此功能(并且只能从博客下载)。
与此同时,我创建了一个代码复合体项目 http://wp7ci.codeplex.com/添加一个 MSBuild 任务,该任务启动模拟器并将结果整理到 XML 文件中。最简单的安装方法是添加wp7-ci
NuGet包 http://nuget.org/List/Packages/WP7-CI.
注意:在 Windows Server 上安装 WP7 SDK需要修改安装程序配置 http://blogs.msdn.com/b/astebner/archive/2010/05/02/10005980.aspx并且不受支持,但运行良好。
验收/系统测试
目的:运行端到端自动化测试,与模拟器上的手机 UI 进行交互(按需或在 CI 服务器上)
Expensify's(对 SEO 来说名字不好)Windows Phone 测试框架 https://github.com/Expensify/WindowsPhoneTestFramework支持使用 SpecFlow 从主机 PC 编写 UI 自动化测试。