LoginSignup
6
7

More than 5 years have passed since last update.

Android2.1でmockwebserverを使う

Last updated at Posted at 2015-06-24

squareのokhttpのサブプロジェクトmockwebserverは、簡単な記述でローカル環境にモックhttpサーバーを立ち上げられるので、通信モジュールの単体テストには大変便利です。

ただし、特に記述は見つかりませんでしたが、Android2.1では動作しません。

私が遭遇した主な問題は、次の2点

  • webmockserver及び依存モジュールのokioで、初期のAndroidには搭載されていなかったJava1.6系由来のAPIを使用しているため、ランライムの例外に落ちる。
  • サーバーソケットクローズにまつわるバグ(https://code.google.com/p/android/issues/detail?id=6144)

これらのAPIを使っている箇所を置き換えたり、バグの回避コードを書いてあげることで、Android2.1でも使うことができそうです。

2015年現在そんな辛い開発をするひとは他にいないとは思いますが、以下対策版の導入手順のメモ書きです。

mockwebserverのビルド

githubにコミットしておいたのでこちらを使います。

% git clone git@github.com:gamako/okhttp.git -b android2.1-workaround

mvnコマンドでビルドしてjarを作ります。

% mvn package -pl mockwebserver

mockwebserver/targetディレクトリにjarファイルができているはずです。

okioのビルド

こちらもgithubにコミットしておいたので、こちらを使います。

% git clone git@github.com:gamako/okio.git -b android2.1-workaround

mvnコマンドでビルドしてjarを作ります。

% mvn package -pl okio

targetディレクトリにjarファイルができているはずです。

プロジェクトに追加

targetディレクトリにできたjarファイルをlibsに置いて、gradleには依存関係を記述します。
okhttpを必要とするので、こちらはmavenから持ってくるようにします。
また、okhttpはokioを自動で取得してくるため、自前のjarとバッティングします。exclude指定しておきましょう。

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    androidTestCompile ('com.squareup.okhttp:okhttp:2.4.0') {
        exclude module: 'okio'
    }
}

こちらからは以上です。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7