私たちがしていることは次のとおりです。
- 電話固有のロジックをファサードに抽象化する
- 可能な限り依存関係を挿入する
- 構築時に UI スレッドで実行する必要があるコードを使用しないでください。これは、UI コントロール、ImageSource、基本的に列挙型ではない System.Windows 型 (Visibility など) を意味します。
- ビジネス ロジックを UI ロジックに変換するには、ValueConverters に大きく依存します。
これを行うと、組み込みの 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) 2 番目のステップは、 Windows Store Unit Test Project ではなく、通常のVisual Studio Unit Test Projectを作成することです。
3) 3 番目のステップは、参照としてWindows Phone 8プロジェクトを含めることです。これは機能し、Microsoft Fakesを使用してmscorlibとSystem.dllDateTime
を作成できるようになり、単体テストのように型を偽造できるようになりました。これは非常に便利な機能です。
4) 4 番目の手順は、次の Windows Phone アセンブリ (および必要なその他のアセンブリ) のローカル コピーを取得することです。
- System.Windows
- Microsoft.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 をターゲットにできるかどうか知っている人はいますか?