android - 如何在Android上解析 "unit-test"json(JSONObject == "null")?

标签 android json unit-testing

我有一些问题。我已经创建了 JSONParser 并且需要对其进行单元测试。但是,如果我试图传递一个带有有效 JSON 副本的 String 对象,每次 JSONObject(我的解析器的一部分)的值为 null。

这里是例子。

我正在分配给字符串的 JSON:

public class JSONParserTest {
    private JSONParser parser;
    private Translations translations;
    private String nounsAndAdjectivesJson = "{\"head\":{},\"def\":[{\"text\":\"house\",\"pos\":\"noun\",\"ts\":\"haʊs\",\"tr\":[{\"text\":\"дом\",\"pos\":\"существительное\",\"gen\":\"м\",\"syn\":[{\"text\":\"домик\",\"pos\":\"существительное\",\"gen\":\"м\"},{\"text\":\"хаус\",\"pos\":\"существительное\",\"gen\":\"м\"}],\"mean\":[{\"text\":\"home\"},{\"text\":\"cottage\"}],\"ex\":[{\"text\":\"white house\",\"tr\":[{\"text\":\"белый дом\"}]},{\"text\":\"wooden house\",\"tr\":[{\"text\":\"деревянный домик\"}]}]},{\"text\":\"помещение\",\"pos\":\"существительное\",\"gen\":\"ср\",\"syn\":[{\"text\":\"здание\",\"pos\":\"существительное\",\"gen\":\"ср\"}],\"mean\":[{\"text\":\"room\"},{\"text\":\"building\"}],\"ex\":[{\"text\":\"house of parliament\",\"tr\":[{\"text\":\"здание парламента\"}]}]},{\"text\":\"гостиница\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"hotel\"}]},{\"text\":\"семья\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"family\"}]},{\"text\":\"хозяйство\",\"pos\":\"существительное\",\"gen\":\"ср\",\"mean\":[{\"text\":\"farm\"}]},{\"text\":\"театр\",\"pos\":\"существительное\",\"gen\":\"м\",\"mean\":[{\"text\":\"theatre\"}]},{\"text\":\"палата\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"chamber\"}],\"ex\":[{\"text\":\"house of representatives\",\"tr\":[{\"text\":\"палата представителей\"}]}]},{\"text\":\"жилье\",\"pos\":\"существительное\",\"gen\":\"ср\",\"syn\":[{\"text\":\"жилище\",\"pos\":\"существительное\",\"gen\":\"ср\"}],\"mean\":[{\"text\":\"housing\"}],\"ex\":[{\"text\":\"safe houses\",\"tr\":[{\"text\":\"безопасное жилье\"}]},{\"text\":\"traditional house\",\"tr\":[{\"text\":\"традиционное жилище\"}]}]},{\"text\":\"род\",\"pos\":\"существительное\",\"gen\":\"м\",\"mean\":[{\"text\":\"kind\"}]},{\"text\":\"рубка\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"cutting\"}]},{\"text\":\"династия\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"dynasty\"}]},{\"text\":\"публика\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"audience\"}]},{\"text\":\"биржа\",\"pos\":\"существительное\",\"gen\":\"ж\",\"mean\":[{\"text\":\"market\"}]}]},{\"text\":\"house\",\"pos\":\"adjective\",\"ts\":\"haʊs\",\"tr\":[{\"text\":\"домашний\",\"pos\":\"прилагательное\",\"mean\":[{\"text\":\"home\"}],\"ex\":[{\"text\":\"house arrest\",\"tr\":[{\"text\":\"домашний арест\"}]}]},{\"text\":\"домовый\",\"pos\":\"прилагательное\",\"ex\":[{\"text\":\"house mouse\",\"tr\":[{\"text\":\"домовая мышь\"}]}]},{\"text\":\"комнатный\",\"pos\":\"прилагательное\",\"mean\":[{\"text\":\"room\"}]}]},{\"text\":\"house\",\"pos\":\"verb\",\"ts\":\"haʊs\",\"tr\":[{\"text\":\"расквартировывать\",\"pos\":\"глагол\",\"asp\":\"несов\"},{\"text\":\"размещаться\",\"pos\":\"глагол\",\"asp\":\"несов\",\"mean\":[{\"text\":\"host\"}]},{\"text\":\"жить\",\"pos\":\"глагол\",\"asp\":\"несов\",\"mean\":[{\"text\":\"live\"}]},{\"text\":\"вмещать\",\"pos\":\"глагол\",\"asp\":\"несов\",\"mean\":[{\"text\":\"accommodate\"}]},{\"text\":\"поселить\",\"pos\":\"глагол\",\"asp\":\"сов\",\"syn\":[{\"text\":\"приютить\",\"pos\":\"глагол\",\"asp\":\"сов\"}],\"mean\":[{\"text\":\"settle\"},{\"text\":\"shelter\"}]},{\"text\":\"помещать\",\"pos\":\"глагол\",\"asp\":\"несов\",\"mean\":[{\"text\":\"place\"}]}]}]}";
    private String verbsJson = "{\"head\":{},\"def\":[{\"text\":\"peek\",\"pos\":\"verb\",\"ts\":\"piːk\",\"tr\":[{\"text\":\"взглянуть\",\"pos\":\"глагол\",\"asp\":\"сов\",\"syn\":[{\"text\":\"заглянуть\",\"pos\":\"глагол\",\"asp\":\"сов\"},{\"text\":\"заглядывать\",\"pos\":\"глагол\",\"asp\":\"несов\"}],\"mean\":[{\"text\":\"glance\"},{\"text\":\"look\"}],\"ex\":[{\"text\":\"peek inside\",\"tr\":[{\"text\":\"заглянуть внутрь\"}]}]},{\"text\":\"выглянуть\",\"pos\":\"глагол\",\"asp\":\"сов\",\"syn\":[{\"text\":\"выглядывать\",\"pos\":\"глагол\",\"asp\":\"несов\"},{\"text\":\"подглядывать\",\"pos\":\"глагол\",\"asp\":\"несов\"}],\"mean\":[{\"text\":\"look\"},{\"text\":\"peep\"}]}]},{\"text\":\"peek\",\"pos\":\"noun\",\"ts\":\"piːk\",\"tr\":[{\"text\":\"быстрый взгляд\",\"pos\":\"существительное\",\"mean\":[{\"text\":\"quick look\"}]},{\"text\":\"взгляд украдкой\",\"pos\":\"существительное\"},{\"text\":\"пик\",\"pos\":\"существительное\",\"gen\":\"м\",\"mean\":[{\"text\":\"peak\"}]}]}]}";

    @Before
    public void setUp() throws Exception {
        translations = new Translations();
    }

    @Test
    public void testVerbsOnlyParsing() throws JSONException{
        JSONObject jsonObject = new JSONObject(verbsJson);
        parser = new JSONParser(jsonObject);
        translations = parser.getTranslations();
        Assert.assertNotNull(translations.getVerbs());
    }
}

我的 JSONParser 单元测试

@Test
public void testVerbsOnlyParsing() throws JSONException, IOException {
    parser = new JSONParser(verbsJson);
    translations = parser.getTranslations();
    Assert.assertNotNull(translations.getVerbs());
}

还有一部分JSONParser,在JSONObject的初始化过程中,从String中获取数据的问题:

public class JSONParser {
    private Translations translations;
    public JSONParser(String response) throws JSONException {
        translations = new Translations();
        parseJSON(response);
    }

    private void parseJSON(String response) throws JSONException {
        JSONObject object = new JSONObject(response); //object == "null"
        JSONArray arrayOfDefinitions = getArray(object, DEFINITION);
        parseArray(arrayOfDefinitions, TRANSLATIONS);
    }

我真的不知道是什么原因造成的问题(JSONObject 对象 == "null"),你能帮帮我吗?

最佳答案

TL;DR:将此添加到您的 build.gradle 文件中:

testCompile "org.json:json:20140107"

这会将 stub 的 Android 库替换为可在桌面上运行的库。

查看这篇文章以获得很好的解释 https://medium.com/@yair.kukielka/android-unit-tests-explained-219b04dc55b5#.qnsgqo7qf

关于android - 如何在Android上解析 "unit-test"json(JSONObject == "null")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443352/

相关文章:

android - 将 somefile.html 文件从内部存储加载到应用程序的 web View

android - 数据库中的数据太多

javascript - 我如何在 Angular JS 谷歌地图中传递嵌套的 json 数组对象

java - 基于其他方法返回类型的单元测试 boolean 方法

unit-testing - 有没有办法在本地和/或 CI/CD 中测试 AppSync 代码?

android - 如何开发跨平台移动应用程序

Android:将自定义值设置为 NumberPicker

python - 如何在 SQLAlchemy 中使用 JSON 插入多条记录

Haskell 的 JSON 输出

.net - 如何在 xUnit 中为包含测试的类设置显示名称?