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