Kie*_*ron 6 unit-testing windows-phone portable-class-library windows-phone-8
我正在寻找一个针对Windows Phone的项目,但由于缺乏单元测试支持,我有点迟钝[1].
我习惯使用NUnit/XUnit来满足我的大多数测试需求,比如NSubstitute用于模拟.我可以说,你不能将这些框架用于Windows Phone项目......
鉴于一些调查,我想知道以下方案是否有效:
通过使用可移植类库,我希望单元测试尽可能接近在设备上运行,而不必破解模拟器.
另一个优点是我可以看到这个解决方案在TFS构建环境中工作 - 所以运行测试是CI构建的一部分......
我希望能够衡量人们的意见,看看这是一个明智的举动,还是愚蠢的错误......
谢谢,
Kieron
[1]我知道有解决方案,但没有一个看起来像完整的框架测试那样集成 - 我正在谈论VS2012/Resharper中的支持,无需模拟器即可运行单元测试.
[2]有没有人知道您是否可以使用WP8 SDK定位Windows Phone 7.x?
Cla*_*sen 10
这就是我们的工作:
如果你这样做,那么你可以使用内置的Visual Studio单元测试框架来测试Windows Phone项目(不仅仅是可移植类库),而且还有一些hackery.
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
Run Code Online (Sandbox Code Playgroud)
请注意,它会在应用于此的计算机上创建一个安全漏洞!
2)第二步是创建一个Visual Studio单元测试项目,一个常规项目,而不是一个Windows Store单元测试项目.
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" />
Run Code Online (Sandbox Code Playgroud)
至
<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>
Run Code Online (Sandbox Code Playgroud)
另外,为避免编译时出现警告,请将以下元素添加到第一个元素中 <PropertyGroup>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
Run Code Online (Sandbox Code Playgroud)
重新加载,编译,运行测试.Voilà,你已经完成了.您甚至可以将其与Microsoft Code Coverage功能集成.
注意: Windows Phone部门没有正式支持单元测试,这是我的团队和我在Skype部门找到的解决方法.
奖金回答:
有谁知道你是否可以使用WP8 SDK定位Windows Phone 7.x?

更新:现在支持 Windows Phone 8 的单元测试。
| 归档时间: |
|
| 查看次数: |
4952 次 |
| 最近记录: |