19

私は、Windows Phone アプリケーションの TDD + CI を実行するための最も推奨される安定したセットアップを見つけようとして、Google Fu を限界まで押し上げてきました。これをうまくやっている人は誰でも私を正しい方向に向けることができますか?

これが私ができるようにしたいことです(可能であれば):

  • 電話機能を必要としないビュー モデルとアプリケーション サービスの単体テストを作成する
  • Resharper または TD.NET を介して Visual Studio で直接テストを実行する
  • エミュレーターを起動せずに、コマンド ラインから XML 出力を使用して単体テストを実行します。
  • できれば、SDK の更新に対して (サード パーティのライブラリに関する限り) 回復力があること

この質問を同じものを探している他の人へのリソースとして保持したいので、避けたい回答は次のとおりです。

  • 未完成または放棄されたプロジェクトのオープン ソース ポート
  • 誰かのブログの添付ファイルとしてのみ利用可能なプロジェクト

また、完全な BDD スタイルの受け入れテストを実施したいと考えていますが、それはまったく別の問題です。

4

6 に答える 6

14

この回答を Community Wiki として追加しているので、他の人が変更して最新の状態に保つことができます。

単体テスト

目的: エミュレーターを必要とせずに、IDE と継続的インテグレーション サーバーの両方から分離 (電話機能なし) で高速に実行されるテストを頻繁に実行する (例: TDD ビュー モデル)

多くのプレゼンテーションで推奨されている方法は、.NET 4 プロジェクトでソース ファイルを参照し、それらに対してテストを実行することです (アセンブリに相当するデスクトップを参照します)。コードでデスクトップ BCLとは異なる API を使用しておらず、参照プロジェクトを最新の状態に保つことができる (新しいファイルは自動的に追加されない) 場合は、それで十分です。

それ以外の場合は、次の手順に従って、デスクトップ CLR で WP7 アセンブリを参照するコードを実行できます。

  1. テスト Silverlight 4 クラス ライブラリ (Silverlight for Windows Phoneプロジェクトではない) をソリューションに追加します。
  2. クラス ライブラリで、mscorelib (基本的には System.* と Microsoft.*) を除くCopy Localすべてのフレームワーク参照を次のように設定します。true
  3. このテスト ライブラリからの参照をNUnit -Silverlight プロジェクトNUnit.Silverlight.Framework.dllとの間で追加しますNUnit.Silverlight.Compatibility.dll
  4. バージョンの警告を無視して、テスト ライブラリからメインの Windows Phone プロジェクトへの参照を追加します。
  5. ReSharper (テスト済み) または TestDriven.NET を使用して、IDE からテストを実行します。
  6. 最新の NUnit リリースの標準 .NET 2.0 を使用してコマンド ラインからテストを実行nunit-console.exeし、./framework=v4.0

(WP7 は SL3 を使用するため、上記の回避策の多くが必要です。Mango が SL4 ランタイムでリリースされると、よりクリーンなセットアップになるはずです)

統合テスト

目的: コードの外部のリソース (電話機能や Web サービスなど) とやり取りする長時間のテストをエミュレーターで、オンデマンドと CI サーバーの両方で実行すること

UPDATEユニット テスト Windows Phone 8 アプリケーションは、Visual Studio 2012 Update 2 で正式にサポートされます。これには、VS 統合とコマンド ライン サポートが含まれます。これらのテストはエミュレーターで実行されるため、統合テストの下に含めました。

これは現在、Silverlight テスト フレームワークの WP7 ポートではサポートされていません (ブログからのダウンロードとしてのみ出荷されます)。

それまでの間、エミュレーターを起動し、結果を XML ファイルに照合する MSBuild タスクを追加するcodeplex プロジェクトを作成しました。最も簡単なインストール方法は、wp7-ci NuGet パッケージを追加することです。

注: Windows Server に WP7 SDK をインストールするには、インストーラーの構成を変更する必要があり、サポートされていませんが、うまく機能します。

受け入れ/システムテスト

目的: オンデマンドまたは CI サーバーの両方で、エミュレーター上の電話の UI とやり取りするエンドツーエンドの自動テストを実行すること

Expensify の (SEO にちなんで名付けられた) Windows Phone Test Frameworkは、SpecFlow を使用したホスト PC からの UI 自動化テストの作成をサポートしています。

于 2011-05-16T10:21:07.517 に答える
3

これは、テストの書き方に関係していると思います。

  • 最終的に、いくつかのコードはいくつかの電話固有のものに触れる必要があります。それらは依存関係として分離され、偽造されるべきです。ユニットテストを電話自体の中で実際に実行するための適切な方法がわかりません。残念ながら、これらの依存関係はテストされていません。
  • NUnit for Silverlightを使用すると、アサーションを取得できます:http ://code.google.com/p/nunit-silverlight/
  • Resharperを使用して、問題なく単体テストを実行しました。同様に、nunit-consoleを使用してテストを実行し、XML出力を取得できます。
  • AyendeのRhinoMocksfor Silverlightは、依存関係のモック/スタブに問題なく機能します。
  • 継続的インテグレーションは少し注意が必要でした。WP7 SDKはサーバープラットフォームでは使用できないため、CI用にWindows7で新しいSDKを作成しました。その制限を回避する方法があるかもしれませんが、私は気にしませんでした。

あなたが望む他のツールはMVVMLightです。これにより、イベントの代わりにEventTriggerとICommandを使用できるようになります。これは、イベントのテストが非常に手間がかかり、DataContextを介してバインドできないためです。

アプリケーションの設計方法に関する限り、次のようになります。

ViewModelは、 MicroIoCを使用して解決される任意の数の依存関係を取り込むことができます。

XAMLの背後にある実際のコードは、ViewModelを解決し、それをデータコンテキストに設定します。これは、XAMLでDataContextを設定できないことを意味するため、残念ですが、次のように、依存性注入を受け入れることをいとわなかったトレードオフでした。

public partial class SignUpPage
{
    public SignUpPage()
    {
        InitializeComponent();
        DataContext = IoC.Resolve<SignUpViewModel>();
    }
}

幸い、XAMLコードの背後に実際に表示されるC#コードはこれだけです。そこから、バインディングとDataContextを使用するかなり通常のMVVMになります。

これで、ViewModelをテストし、必要な依存関係を挿入(またはそれらを偽造)することができます。WP7固有のものを使用しようとしない限り、エミュレーターにいなくても正常に実行されます。

于 2011-05-13T16:23:25.353 に答える
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:38:59.527 に答える
2

これは、電話でWP7テストを自動化し、アプリを自動的に展開し、テストを実行し、結果を読み取ることに成功した誰かへのリンクです: http://justinangel.net/WindowsPhone7EmulatorAutomation

これはCoreCon APIを利用しています。これは、私が試し始めるまで非常に興味深いものでしたが、ほとんどの関数が実装されていない例外をスローしたことがわかりましたが、自動化されたテストを実行するのに十分なものがあります。

于 2011-05-13T18:13:44.613 に答える
1

Windows Phone アプリで TDD を実行するには、少なくとも 3 つの方法があります。

  1. Silverlight ユニット テスト フレームワーク- Jeff Wilcox によって書かれました。ここで最新のアップデートを見つけることができます。それが最も一般的な方法のようです。このアプローチに関する多くの情報があります。

    また 、手動でテスト プロジェクトを作成する必要がないように、Visual Studio テスト プロジェクト テンプレートを確認してください。ただし、このソリューションでは電話エミュレーターでテストを実行する必要があり、非常に煩わしい場合があります。

  2. Portable Library Tools - Microsoft が提供する新しい Visual Studio アドインで、Windows Phone を含むさまざまな .NET ベースのプラットフォームで再コンパイルせずに実行される C# および Visual Basic ライブラリを作成できます。

    Portable Library Tools を使用して Windows Phone の TDD を実行する方法については、この投稿を参照してください。ここでは、 Visual Studio 拡張機能を見つけることができます。

    このアプローチの欠点は、このライブラリのアセンブリ サポートが限られていることです。たとえば、コマンドを使用することはできません (ICommand は PresentationCore.dll に存在するため)、MVVMLight も使用することはできません。一方で、テスト プロジェクトの柔軟性が向上します (さまざまなモック フレームワークを使用でき、IoC コンテナーを実行できます)。 VS からのテスト、Resharper でのテストの実行など)。

  3. Silverlight NUnit プロジェクトVS テンプレート。このブログ投稿をチェック して、プロジェクトでこのテンプレートを使用する方法を確認してください。このスレッドに登場した Toran Billups のスクリーンキャストもチェックしてください。Moq や Resharper などの他のフレームワークやプログラムで Silverlight NUnit プロジェクトを使用すると、問題が発生する可能性があることに注意してください。
于 2012-01-14T21:44:55.000 に答える
0

私はまさにこのトピックについて 16 分間のスクリーンキャストを行いました。WP7 で NUnit と resharper を使い始める方法を示します。また、私が遭遇した問題のいくつかも示します (ちなみに CI に関連するものは何もありません)。

http://toranbilllups.com/blog/archive/2011/07/24/Test-Driving-My-Windows-Phone-7-App

于 2011-08-26T23:47:15.653 に答える