Android Studio 1.2.2 - junit - json 空,为什么?

Android Studio 1.2.2 - junit - json empty, why?

我正在尝试在 AndroidTestCase 中使用 json,但是 JSONObject 始终为空,即使我在其中放置了一个元素。为了使 JSONObjects 在单元测试中工作,我必须做任何特别的事情吗?

这是我的Android测试用例class:

public class JSONUtilTest extends AndroidTestCase {

    private JSONObject mJSONSummary;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        mJSONSummary = new JSONObject();
        mJSONSummary.put("test", 123);
        assertTrue(mJSONSummary.length() == 1); //assertion error
    }
}

我的模块 build.grade:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.nubank.brunodea"
        minSdkVersion 8
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        testApplicationId "com.nubank.brunodea"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:support-v4:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:recyclerview-v7:22.2.0'
}

我正在使用 Android Studio 1.2.2,当我不使用 JSONObjects 时,测试有效。

谢谢!

正如您已经提到的,JSON对象只是模拟的,因此无法使用默认配置对其进行测试。您可以选择使用外部 JSON 实现来进行测试,就像 json simple or choose to use another framework which mocks the equivalent classes for you with full functionality like Robolectric 可以做的那样。

我个人选择第二个选项,但您应该考虑到这是一个非常庞大的测试环境,对于简单的 JSON对象测试来说可能有点过大。

另请参阅 Whosebug 上的这个答案: