FriendlyでWPFのGUIテストを行うサンプルと、軽い解説をします。参照URLささいなことですが。公開しているGUI操作用のライブラリです。Friendlyを使用すると、ViewとModelが分離できていないようなプログラムでもユニットテストを記述することができます。nugetでインストールできますので、導入は簡単です。解説サンプルコードサンプルコードは、下記よりダウンロードできます。https://github.com/rot-z/CodeerFriendlySample試験対象のプログラム下記のようなソフトウェアキーボードっぽいプログラムを用意しました。Modeのコンボボックスを変更すると、下部のボタンがひらがな/カタカナに切り替わります。Textに当該文字が追加されます。XAML構成ひらがな用のGridとカタカナ用のGridを同一位置に配置しています。ModeのコンボボックスのSelectedIndexをトリガにして、ひらがな用のGridとカタカナ用のGridを切り替えています。テストコードFriendlyでテストコードを記述する際のお約束については、かずきさんのブログが詳しいです。Friendlyを入門してみたサンプルコードでは、CodeerFriendlySampleTestプロジェクトがテストプロジェクトになります。以下、つたない理解ですが、自分の理解をまとめます。Friendly全体に関しては、下記のような感じです。WPFそれぞれについて、主要なコントロールを操作しやすくするライブラリを公式に提供してくれている(RM.Friendly.WPFStandardControls等)Friendlyを使用したユニットテストに関しては、下記のような感じです。}TestIntializeは、テスト対象のアプリを起動しアタッチした後、メインウィンドウを取得します。取得したメインウィンドウを元にテストドライバを生成し、保持します。テストドライバ最初にFriendlyを使用する際に、ちょっとハードル感の高い部分だと思います。}ユニットテストでアクセスするコントロール(UIElement)をFriendlyの操作用クラスでラッピングして保持しているだけです。結局のところ、やりたいことは下記を満たすことだけです。操作用のクラスを取得する部分はテストと関係ない部分なので、テストドライバとして別クラスにまとめておくテストドライバのプロパティとして、必要な分のコントロール操作クラスのインスタンスを公開します。Windowオブジェクトの操作クラスであるWindowControlクラスには、コントロールをIEnumerable的に扱えるLogicalTreeメソッドがあるので、kコンストラクタ内部で目的のコントロールをがしがし保持します。ユニットテストコードからは、このテストドライバのインスタンスを通して、テスト対象アプリのコントロールを操作することになります。ユニットテストサンプルには2つのユニットテストを記載していますが、ここでは1つだけ例示します。"あい");}普通のGUIの試験項目と同じような感覚で、ユニットテストコードが記載できます。(テストの内容がこんなもんで良いのか、という話はひとまず置いておいてください・・・)はまりどころテストドライバ書くのが大変これが一番大変です。テストコードなので、動けばいいや、くらいの気持ちで書いた方が良いかもしれません。公式には支援ツールがありそうなので、それを使えば省力化できるかもしれません。コントロールの状態変化のタイムラグに注意GUIの試験なので、コントロールの状態変化のタイムラグがあります。今回のサンプルだと、コンボボックスの選択を変更したタイミングでGridのVisibilityが変化しますが、EmurateChangeSelectedIndexが完了したタイミングではまだGridのVisibility変化しきっていない時があったりします。何もしないとユニットテストの再現性が落ちてしまうので、とりあえず、Visibility変化を待ち受けるコードを入れて対処しています。仕様書のない既存のアプリケーションの保守を行う場合でも、少しずつGUIベースのユニットテストを書き足していく事で、変更に対する耐性を上げていくことができるようになると思います。分野は雑多ですが、技術的なブログを公開しています。