Windows Phone的单元测试状态

Ric*_*lay 19 tdd continuous-integration windows-phone-7 windows-phone

我一直在推动我的Google Fu达到极限,试图为Windows Phone应用程序找到最推荐/稳定的TDD + CI设置.任何成功做过这件事的人都可以指出我正确的方向吗?

这是我想要做的(如果可能的话):

  • 为不需要电话功能的视图模型和应用程序服务编写单元测试
  • 通过Resharper或TD.NET直接在Visual Studio中执行测试
  • 使用XML out从命令行执行单元测试,而不启动模拟器
  • 最好是对SDK更新的弹性(就第三方库而言)

既然我想把这个问题作为一个资源给其他人寻找同样的东西,这就是我希望避免的答案:

  • 不完整或被放弃的项目的开源端口
  • 仅作为某人博客附件提供的项目

我也想进行完整的BDD式验收测试,但这完全是另一个问题.

Ric*_*lay 14

我将此答案添加为社区Wiki,以便其他人可以对其进行修改以使其保持最新状态.

单元测试

意图:运行隔离(无电话功能),快速执行测试,通常来自IDE和Continuous Integration服务器,无需仿真器(例如TDD View Models)

我在许多演示文稿中看到的方法涉及在.NET 4项目中引用源文件并针对这些文件运行测试(引用程序集的桌面等效项).如果您的代码不使用任何与桌面BCL不同的API,并且您可以处理保持参考项目是最新的(新文件不会自动添加),那么这应该足够了.

否则,您可以按照以下步骤执行引用桌面CLR中的WP7程序集的代码:

  1. 在您的解决方案中添加测试Silverlight 4类库(不是适用于Windows Phone项目的Silverlight )
  2. 在类库中,Copy Local除mscorelib(基本上是System.*和Microsoft.*)之外的所有框架引用设置true
  3. 从这个测试libary参考加入NUnit.Silverlight.Framework.dllNUnit.Silverlight.Compatibility.dllNUnit的,Silverlight项目
  4. 将测试库中的引用添加到主Windows Phone项目中,忽略版本警告.
  5. 使用ReSharper(已测试)或TestDriven.NET从IDE运行测试
  6. 使用标准的.NET 2.0运行在命令行测试nunit-console.exe最新NUnit的释放,传递/framework=v4.0.

(上面的许多解决方法都是必需的,因为WP7使用SL3.一旦Mango与SL4运行时一起发布,它应该是一个更清洁的设置)

集成测试

意图:运行更长时间运行的测试,这些测试与模拟器上的代码外部资源(如电话功能和Web服务)交互,无论是按需还是在CI服务器上

更新单元测试Windows Phone 8应用程序将在Visual Studio 2012 Update 2中得到官方支持,包括VS集成和命令行支持.这些测试在模拟器中运行,因此我将其包含在Integration Tests下.

目前Silverlight测试框架的WP7端口不支持此功能(并且只能从博客下载).

与此同时,我创建了一个codeplex项目,它添加了一个MSBuild任务,用于启动模拟器并将结果整理到XML文件中.最简单的方法安装是添加wp7-ci NuGet包.

注意:在Windows Server上安装WP7 SDK 需要修改安装程序配置,但不受支持,但效果很好.

验收/系统测试

意图:根据需要或在CI服务器上运行与模拟器上的手机UI交互的端到端自动化测试

Expensify(以SEO命名不佳)Windows Phone Test Framework支持使用SpecFlow从主机PC编写UI自动化测试.