如何在Android上进行“单元测试”JSON解析(JSONObject ==“null”)?

3

我有一些问题。我创建了一个JSONParser并需要对其进行单元测试。但是,如果我尝试传递一个具有有效JSON副本的String对象,每次我的解析器中的JSONObject都具有null值。

以下是示例:

我要分配给String的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());
    }
}

我的JSON解析器单元测试

@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"),你能帮我吗?


如果您在运行时遇到异常,应该始终发布完整的堆栈跟踪以及您的问题。 - Doug Stevenson
你的问题答案在这里:https://dev59.com/VlwX5IYBdhLWcg3wnwnd#35675861 - Yair Kukielka
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接