6

Windows Phone を対象としたプロジェクトを開始しようとしていますが、ユニット テストのサポートがないため、少し先延ばしにしています [1]。

私は、ほとんどのテスト ニーズに NUnit/XUnit を使用することに慣れており、モックには NSubstitute のようなものを使用しています。私が知る限り、これらのフレームワークを Windows Phone プロジェクトに使用することはできません...

いくつかの調査を行った結果、次のシナリオが機能するかどうか疑問に思っていました。

  • Visual Studio 2012 を使用する
  • ビュー モデルおよびその他のロジック用のポータブル クラス ライブラリ プロジェクトを作成します。
  • 単体テスト用の他のポータブル クラス ライブラリ プロジェクトを作成する
  • Windows Phone 8 SDK[2] を待ち、それを使用してビューを作成します。

ポータブル クラス ライブラリを使用することで、エミュレーターをクラック オープンしなくても、単体テストがデバイス上での実行に可能な限り近いものになることを願っています。

もう 1 つの利点は、このソリューションが TFS ビルド環境内で機能することを確認できることです。したがって、テストの実行は CI ビルドの一部です...

これが賢明な動きなのか、それともばかげた用事なのかについて、人々の意見を評価したいと思っていました...

ありがとう、
キーロン

[1] そこに解決策があることは知っていますが、完全なフレームワーク テストほど統合されているように見えるものはありません。具体的には、エミュレーターを必要とせずに単体テストを実行するための VS2012/Resharper でのサポートについて話しています。

[2] WP8 SDK を使用して Windows Phone 7.x をターゲットにできるかどうか知っている人はいますか?

4

4 に答える 4

10

私たちがしていることは次のとおりです。

  • 電話固有のロジックをファサードに抽象化する
  • 可能な限り依存関係を挿入する
  • 構築時に 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を使用してmscorlibSystem.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 をターゲットにできるかどうか知っている人はいますか?

ここに画像の説明を入力

于 2012-10-23T16:34:18.337 に答える
2

いくつかのかなり基本的なテストを行ったところ、テスト用のポータブル ライブラリ クラス プロジェクトと通常のクラス ライブラリがうまく機能することがわかりました。

これに対する注意点は、ポータブル クラス ライブラリ用に構築された MVVM フレームワークをまだ見つけていないことです。これにより、ビュー モデルがテストできなくなります...ファイル リンクを使用しない限り (そして、ビュー モデルが MVVM フレームワーク固有のベースから継承されていると仮定します)クラス)。P 理想的ではありませんが、私が見つけた最良の方法です。


編集:

ポータブル クラス ライブラリ上に構築された Prism ( v4.5 ) リリースがあるようです...

少なくともこれを書いている時点では、安定版またはプレリリース版の NuGet にはありませんが、その使用法と更新について調査を行います。

また、Windows Phone 8 SDK が Windows Phone 7 をターゲットにできるという噂もありました。

于 2012-10-22T07:36:40.370 に答える
2

更新: Windows Phone 8 の単体テストがサポートされるようになりました。

http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests-in-visual-studio-2012-update-2.aspx

于 2013-02-12T07:35:29.327 に答える
1

Moq を使用して、VS2013 WP8.0 アプリケーションで使用されているビューモデルを単体テストすることができました。これが私のソリューション構造です: - 自作の Prism ライブラリを使用した WP8 (Silverlight) - プレゼンテーション層としての WP8 ポータブル ライブラリ - WP8 単体テスト プロジェクト

ここにアクセスして、最新のMoqバージョンをダウンロードしてください。Silverlight フォルダーには、Moq 用と Castle Core 用の 2 つの dll があります。単体テスト プロジェクトの参考として使用してください。VS2013 では、これらの DLL を参照として直接追加することはできないことに注意してください。プロジェクトをアンロードし、.csproj を編集し、2 つの参照を手動で追加して、プロジェクトをリロードします。

あまりきれいな方法ではありませんが、ビューモデルを単体テストするために見つけた唯一の方法です。

于 2014-09-23T06:37:50.073 に答える