这就是我们所做的:
- 将特定于手机的逻辑抽象到外观中
- 尽可能注入依赖项
- 避免使用任何需要在构造时在 UI 线程上运行的代码,这意味着任何 UI 控件、ImageSource、基本上任何非枚举的 System.Windows 类型(例如 Visibility)
- 严重依赖 ValueConverters 将业务逻辑转换为 UI 逻辑。
如果你这样做,那么你can使用内置的 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 单元测试项目,一个普通的,不是一个Windows 应用商店单元测试项目.
3)第三步是包括Windows 手机 8项目作为参考。这有效,您现在可以使用微软假货使mscorlib and 系统.dll,允许你伪造类似的类型DateTime
在你的单元测试中,这是一个非常方便的功能。
4)第四步是获取以下 Windows Phone 程序集(以及您需要的任何其他程序集)的本地副本:
它们可以在C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile\Framework folder.
将它们复制到本地/lib/文件夹,然后卸载并编辑单元测试项目的 MSBUILD xml。
Change:
<Reference Include="System.Windows" />
<Reference Include="Microsoft.Phone" />
To
<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 代码覆盖率功能集成。
NB:单元测试是not这是由 Windows Phone 部门正式支持的,这是我和 Skype 部门的团队找到的解决方法。
奖金答案:
有谁知道是否可以使用 WP8 SDK 定位 Windows Phone 7.x?