Android device tests

I am trying to write AndroidTestCase for one of my classes that connect to the server and parse the returned JSONObject. When I test the functionality in the UI, the file works fine and the correct information is parsed and displayed. When I enter the url into my browser, I return the correct JSONObject. However, when I try to get the JSONObject via AndroidTestCase and just check that it is not null, I get an IOException when it tries to get the corresponding JSONObject for the url. I have verified that the url used is correct. Here's the stack trace.

java.net.UnknownHostException: api.penncoursereview.com
 at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
 at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
 at java.net.InetAddress.getAllByName(InetAddress.java:256)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1018)
 at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:512)
 at edu.upenn.cis.cis350.backend.Parser.retrieveJSONObject(Parser.java:34)
 at edu.upenn.cis.cis350.test.ParserTest.test_retrieveJSONObject(ParserTest.java:22)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:507)
 at junit.framework.TestCase.runTest(TestCase.java:154)
 at junit.framework.TestCase.runBare(TestCase.java:127)
 at junit.framework.TestResult$1.protect(TestResult.java:106)
 at junit.framework.TestResult.runProtected(TestResult.java:124)
 at junit.framework.TestResult.run(TestResult.java:109)
 at junit.framework.TestCase.run(TestCase.java:118)
 at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
 at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
 at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

      

Any idea why the code works in the simulator but not in the test?

Thanks in advance for your help!

change:

Here is the relevant method:

public JSONObject retrieveJSONObject(String path){
    try{
        URL url = new URL(path);
        Log.w("Parser: retrieveJSONObject", "url=" + url);
        URLConnection connection = url.openConnection();
        String line;
        StringBuilder builder = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }
        Log.v("Length",builder.toString());

        return new JSONObject(builder.toString());
    }
    catch(IOException e) {
        Log.w("Parser: retrieveJSONObject", "IOException: Bad Url");
        e.printStackTrace();
        return null;
    } catch (JSONException e) {
        Log.w("Parser: retrieveJSONObject", "JSONException: mis-formatted JSON");
        e.printStackTrace();
        return null;
    }
}

      

Line 34 is the line that initializes the BufferedReader.

+3


source to share


1 answer


I assume you are missing INTERNET permission . Given that your method is defined static

in a class Utils

, the following test works.



public void testRetrieveJSONObjectWithUrl() {
    final String url = "http://www.bom.gov.au/fwo/IDV60901/IDV60901.94868.json";
    assertNotNull(Utils.retrieveJSONObject(url));
}

      

+1


source







All Articles