android-bindingを使ってみる その2

android-bindingの続きです。
前回のソースにアクティビティの開始を追加しました。
ポイントは以下です。それぞれソースのリンクも併記します。
  1. ViewModelのJUnitでテストできる状態を維持する。
    https://bitbucket.org/twopack/android-binding-sample/changeset/6cf2bd843f36
  2. アクティビティの開始をテストする。
    https://bitbucket.org/twopack/android-binding-sample/changeset/c44ee14f5722

1. ViewModelのJUnitでテストできる状態を維持する。

android-bindingのサンプルであるMarkupDemoでは、リストビューの項目をクリックした際にインテントを発行してアクティビティを開始するコードがあります。
リストビューの項目をクリックした際の処理は、Commandクラスを使用したバインドによって行われます。

layoutの中でバインドできる属性については、以下のページで記載されています。
http://code.google.com/p/android-binding/wiki/BindingSyntax


// ”onClickItem”は、layoutのbinding:onItemClickedで定義したもの。
public final Command onClickItem = new Command() {

        @Override
        public void Invoke(final View view, final Object... args) {
            // ここにクリック時の処理
        };
};

ここで単純にインテントを発行すると、Androidの中のものを動かさないといけなくなるため、JUnitでの(エミュレータを使用しない)テストができません。
そこで、実際のインテント発行はアクティビティ側で実装し、アクティビティで実装したメソッドをViewModelに登録して呼び出すようにしました。
ViewModelとしては、登録されたメソッドの呼び出しまでは責務となるため、JUnitでテストが可能です。

2. アクティビティの開始をテストする。

ViewModelはメソッドの呼び出しまでを責務としたため、アクティビティ側の実装としてインテント発行のテストが必要になります。
こちらはエミュレータでテストすると割り切って実装することにしました。
以下を参考にしました。
AndroidのテストクラスはJUnit3をベースにしています。今回の実装でテストコードをJUnit4で書いていたので、プロジェクト自体を別としました。

やはり、エミュレータにインストールしてテストすることになるので時間がかかるのが難です。以下を使うなどしてもう一工夫したいところです。


コメント