LoginSignup
6
4

More than 5 years have passed since last update.

Android StudioのJUnitでハマった事

Last updated at Posted at 2018-05-23

Android StudioでJSONObjectを使用したUTでハマりました。

下記のUTを実行すると。。。

JSONObjectTest.java
public class JSONObjectTest {
    @Test
    public void testJsonObject() throws JSONException {
        JSONObject json = new JSONObject();
        json.put("key", "value");
        // 説明のため、簡単なテスト内容にしています
        assertEquals("value", json.get("key"));
    }
}

RuntimeExceptionが発生します。

java.lang.RuntimeException: Method put in org.json.JSONObject not mocked. See http://g.co/androidstudio/not-mocked for details.

これは、UTを実行するために使用されるandroid.jarには、実際のコードが含まれていないためです。

そして、上記のメッセージ通りに対応すると。。。

build.gradle
android {

    // 下記を追加
    testOptions {
        unitTests.returnDefaultValues = true
    }
}

テストが失敗します。

java.lang.AssertionError: 
Expected :value
Actual   :null

これは、returnDefaultValuesをtrueにすると、RuntimeExceptionの代わりに、default値(null/0)を返すためです。
mockすることも可能ですが、UTの際はjavaのorg.jsonを使用することで対応が出来ます。

build.gradle
dependencies {

    // 下記を追加
    testImplementation 'org.json:json:20180130'
}
6
4
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
4