2011年10月16日(Sun) 場所によっては雨が降ってたり [長年日記]
● [Android] SharedPreferencesのテストにMockContextを使ってみる
そもそもstubとmockの違いもよくわかっていないのですが、 アプリづくりは続けたい。 SharedPreferencesのテストのために、アプリケーションとは独立したSharedPreferencesを用意したくなったので試してみました。 テスト初心者の試行錯誤の結果なので、眉にツバをつけて読んでくださいね。 誤りの指摘もよろしくお願いします。
ここでは、SharedPreferencesとやりとりをするクラスをテストしようとしています。 テストのために環境にある設定を変えてしまうのは避けたい (ユニットテストでは必須の要求ですよね)。 最初は、これまでの値を覚えておいてテスト後に戻すようにしていたのですが、 せっかくだからもう少しちゃんとしたものにしたい。 Android Developers より、 MockContextというものを見つけました。 なかなか正当な使い方の例を見つけられなかったので、 Stackoverflowへの回答を眺めながら、 このように変更してみました(下記に抜粋)。
テストケースのためのクラスのインナークラスとして、 テスト用のSharedPreferencesを環境から切り離すためのクラスを、 MockContextをextendして作りました。 Privateなインナークラスにしておけば、他から間違えて使っちゃう心配がないかな、と。
テスト用のSharedPreferencesを環境から切り離すためのクラスには、 テスト対象のコードから呼んでもらえるように、 getSharedPreferences()を定義しました。 本当のSharedPreferencesの実装を使ったテストをしたいので、 ここでは、テスト環境のContextから得られたSharedPreferencesを、 名前を変えて使うようにしてみました。
この変更後、以前と同じくテストが成功することを確認しました。 さて、これでいいのかな…。
次はActivityのテストをしてみたいと思います。難しそう。
最近のツッコまれどころ