非Webブラウザアプリの単体テスト

ここしばらくAndroidアプリと戯れていたのですが、
概念として外せないのがThreadクラスとListenerクラス。
時間のかかる処理を裏で実行しながら「しばらくお待ち下さい」を画面上に表示する時なんかは
別Threadを立て、時間のかかる処理をそちらで実行させる必要があります。
また、ボタンをクリックした時のイベントは事前にListenerとして登録しておく必要があります。
この辺のクラスはWebアプリケーションではあまり意識しないはずです。


で、上記クラスを使用している箇所や、画面表示部分の単体テストが悩ましいですね。
いわゆる「MVCモデル」の「VC」のテストが難しい。


画面描画するデータを設定する処理は大抵ブラックボックス的なオブジェクトに対する操作ですから、
setしてgetして・・・ということを繰り返すのみ。
テストクラスを記述しても、本当に意味のあるものになるか疑問です。
Mockに対してsetしてgetして・・・を記述するだけになるはずなので、個人的にはあまり好ましくありません。
エミュレータ(もしくは実機)上で実際に動かして目視した方がテストしてる感が出るでしょう。


クラス設計的にも、「M」部分と「VC」部分を分けていかないと、
意図しない動作をしている時の切り分けに時間がかかるはずです。
テストしやすい設計を心がけ、せめて「VC」部分の問題だけで嵌るようにした方が現実的かと。
あ、もちろん「VC」の中でも単純なメソッド呼び出しでテストできる箇所があれば、
その部分だけメソッドに切り出してテストすれば良いでしょう。


やはりテストを効率的に行う為には、クラス設計(メソッド設計)が重要だと実感。