ユニットテストを書いてみようはじめまして。東京開発課の沖田と申します。「テスト」書いてますか。触れているのですが、初めての環境でまだ右往左往しております。ユニットテストをする方法を調べてみました。一昔前までは正直なところ「テスト」はそれほど注目は浴びていなかったと思います。普及するに従い徐々に注目を集めるようになり、今となっては長期間に渡って高品質なプロダクトを維持していくためには必須の知識・技術と言っても過言ではありません。用いた開発で、比較的手軽に行える、クライアントアプリのユニットテスト、つまりメソッド単位のテストについて簡単にではありますが、紹介させていただきたいと思います。いったモバイルアプリのクロスプラットフォーム開発環境です。モバイルアプリに限った話ではありませんが、クロスプラットフォームでの開発は、どれだけコードを共通化できるかというのが大切な要素です。この点に関する設計が充分でないとプラットフォーム依存のコードが多くなり、クロスプラットフォーム開発環境の優位性を十分に発揮することができません。そのため、十分に考えられた構成のプロジェクトであれば、自然とプラットフォーム依存のコードは減り、共通して使うことのできるコードが増えていきます。その共通で使うことができるコードは、結果的に影響範囲も広く使用頻度も高くなります。コードの共通化というのは開発の期間を短縮できる可能性のある非常に魅力的な言葉ですが、逆にそれだけ重要度や難易度が高いということでもあるのです。そのような重要な処理に対してテストコードを書くということは、処理を十分に検討・確認することを意味し、結果としてバグも少なく高品質なアプリケーションの開発につながります。使った場合でも同じ事が言えます。限らず、開発している最中やアップデートの際の仕様変更などで、既存の処理を修正する必要が出てくることも少なくありません。その時にテストコードがあれば、変更した処理が想定外の影響を及ぼしていないか確認することができるため、エンバグの可能性も減らすことができます。これまで、プログラマーの間ではテストコードの有用性は理解されていましたが、工数や予算の都合などで割愛されてしまうことも少なからずありました。昨今のアプリケーション開発は外見も中身もクオリティが高いものが求められます。ライブラリー以外にも、このような一見地味なテストの重要性を、エンジニアはもちろん、エンジニア以外も理解しておくことは非常に大切だと言えるでしょう。ユニットテストを書いてみるそれでは実際にサンプルプロジェクト(ソリューション)を一つ作成し、そのユニットテストを書いてみましょう。ベースのユニットテストプロジェクトを作成し説明させていただきます。既存のプロジェクトにテストを追加するケースを想定して、まず最初にベースとなるプロジェクトを作成し、そこにユニットテストを追加する流れで説明します。ベースのプロジェクトの作成まずはベースとなるプロジェクト(ソリューション)を作成します。テストするメソッドを用意しましょう。下記のようなメソッドを記述しました。次にユニットテスト用のプロジェクトを作成します。適当なものを入れて進めます。これでユニットテストを書く下準備は整いました。ここまでの状態で一度ユニットテストのプロジェクトを実行してみましょう。プロジェクトを右クリックし「この項目を実行」を選択します。ユニットテストのコードを書くさてそれではいよいよテストコードを書いてみましょう。テスト自体の大まかな流れは下記のようになります。メソッドをテストしてみます。つの引数の大きい方を返すというものです。テストを記述するためのクラスを作成します。いう名前のファイルを作成し下記のようなコードを記述しました。いう記述が、テストの実行対象となるためのアトリビュートです。}}上記のテストコードを書いて、再度テストプロジェクトを実行します。テストが成功すれば問題ありませんが、もし失敗した場合はテストコードかテスト対象のメソッドに間違いがあるはずです。メソッドの実装だけでなくテスト判定にも間違いがある可能性はあるので、テストに失敗した場合はメソッドの実装とテストコードの両方を確認しましょう。ログを見ても良いですし、テストアプリケーション内に表示される内容でもどこでテストに失敗したかが分かります。メソッドは非常に単純なものですが、場合によってはもっと複雑な実装の場合もあるかもしれません。そのような時でも上記のようなテストが書かれていたら安心して使うことができますし、実装を変更する場合でもテストの成否を確認すれば安心して修正を入れることができます。メソッドの実装に対してやや大げさすぎる感もあります。実際にどの程度のケースを網羅するかは、実装の複雑度などに応じて考える必要があるでしょう。その判定方法で多くの種類があり、場合によって使い分けると便利です。全部は紹介しきれませんが、まず最初に下記のものが使えるようになると便利かと思いますので、ぜひ参考にして下さい。なければ失敗https://developer.xamarin.com/api/type/NUnit.Framework.Assert/どのようなテストコードを書けばよいかたとえば数値を引数に取る場合は、値の下限・上限、さらに結果が変化する閾値の前後の値、などを確認することが多くなります。ケースも確認すると良いでしょう。どのようなテストコードを書けば良いか最初のうちは悩みがちですが、基本的にはメソッドの仕様をテストコードで表すつもりで書くのがオススメです。オススメなのは、メソッド本体より先にテストコードを書いて、できればレビューもしてもらうことです。すれば、テストコードでメソッドの仕様をある程度理解してもらえるので、コードのみならず仕様もレビューしてもらえることになります。この流れはテスト初心者のみならず、プログラミングの経験が浅い人にとっても安心の材料です。ついてこれはまだ自分も調査中なので深くは語れないのですが、テストのログを取るために便利そうな機能なので、軽く紹介させていただきます。いう設定項目の画面になります。この設定は、テストの結果をサーバーに送信するためのパラメータで、任意の値を設定できます。オンにした場合、テスト実行時に自動的にサーバーに接続するようになるので、不要な場合はオフのままにしておきましょう。この値はコードからも取得できます。値*/サーバーへのログ送信をしなくとも、この値をテストのパラメータとして使うことも可能なので、更に調査して活用したいと思います。テストをクラウドで実行できるサービスがあります。クラウドと言ってもテストが実行されるのはその先に接続されている実機です。種類以上のデバイスを使うことができるとのことなので、それを考えると自分で揃えるよりははるかに安く済ませることができます。海外端末が多いようですが、手元に用意できない端末のテストを行いたいときは非常に有用な選択肢です。(※有料契約は必要ですが無料の試用期間も設けられています)興味のある方は下記のリンクを参考にしてみてください。ユニットテストについて紹介させていただきました。興味のあるかたは下記の公式ドキュメントからさらに詳細な情報を見ることができます。https://developer.xamarin.com/guides/ios/deployment,_testing,_and_metrics/touch.unit/自分もまだまだ勉強中の身ですので、今後もクオリティの高いアプリケーションの開発を目指し更に勉強していきたいと思います。アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。