这是我们所做的:
- 将特定于电话的逻辑抽象到外观中
- 尽可能注入依赖项
- 避免使用任何需要在构建时在 UI 线程上运行的代码,这意味着任何 UI 控件、ImageSource,基本上是任何不是枚举的 System.Windows 类型(例如 Visibility)
- 严重依赖 ValueConverters 将业务逻辑转换为 UI 逻辑。
如果你这样做,那么你可以使用内置的 Visual Studio 单元测试框架来测试 Windows Phone 项目(不仅仅是可移植类库)。
1)第一步是禁用强名称验证,这可以通过以下 Powershell 脚本来完成:
reg DELETE "HKLM\Software\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Microsoft\StrongName\Verification\*,*" /f
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64")
{
reg DELETE "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification" /f
reg ADD "HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification\*,*" /f
}
Restart-Service msiserver
请注意,它会在应用它的机器上创建一个安全漏洞!
2)第二步是创建一个Visual Studio Unit Test Project,一个普通的,而不是Windows Store Unit Test Project。
3)第三步是包含Windows Phone 8项目作为参考。这很有效,您现在可以使用Microsoft Fakes来制作mscorlib和System.dll,允许您DateTime
在单元测试中伪造类型,这是一个非常方便的功能。
4)第四步是获取以下 Windows Phone 程序集的本地副本(以及您需要的任何其他程序集):
它们可以在C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile\Framework文件夹中找到。
将它们本地复制到/lib/文件夹,然后卸载并编辑单元测试项目的 MSBUILD xml。
改变:
<Reference Include="System.Windows" />
<Reference Include="Microsoft.Phone" />
到
<Reference Include="System.Windows, Version=2.0.6.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, processorArchitecture=MSIL">
<HintPath>lib\System.Windows.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Phone, Version=8.0.0.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e, processorArchitecture=MSIL">
<HintPath>lib\Microsoft.Phone.dll</HintPath>
</Reference>
此外,为避免编译时出现警告,请将以下元素添加到第一个<PropertyGroup>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
重新加载、编译、运行测试。瞧,你就完成了。您甚至可以将其与 Microsoft 代码覆盖率功能集成。
注意: Windows Phone 部门不正式支持单元测试,这是我和我在 Skype 部门的团队发现的一种解决方法。
奖励答案:
有谁知道您是否可以使用 WP8 SDK 以 Windows Phone 7.x 为目标?