2

Android で単体テストを実行しようとすると、次のエラーが発生します - Android の外部で実行すると合格するテスト:

07-18 15:43:44.816: W/System.err(545): uk.co.redfruit.libraries.srpDB.exceptions.SRBClientException: java.io.FileNotFoundExce$
07-18 15:43:44.816: W/System.err(545):  at uk.co.redfruit.libraries.srpDB.SRPDBClient.getContent(SRPDBClient.java:116)
07-18 15:43:44.816: W/System.err(545):  at uk.co.monkeypower.android.straightrazordatabase.test.SRPDBClientTest.testGetConten$
07-18 15:43:44.826: W/System.err(545):  at java.lang.reflect.Method.invokeNative(Native Method)
07-18 15:43:44.826: W/System.err(545):  at java.lang.reflect.Method.invoke(Method.java:507)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestCase.runTest(TestCase.java:154)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestCase.runBare(TestCase.java:127)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestResult$1.protect(TestResult.java:106)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestResult.runProtected(TestResult.java:124)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestResult.run(TestResult.java:109)
07-18 15:43:44.826: W/System.err(545):  at junit.framework.TestCase.run(TestCase.java:118)
07-18 15:43:44.826: W/System.err(545):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
07-18 15:43:44.826: W/System.err(545):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
07-18 15:43:44.826: W/System.err(545):  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
07-18 15:43:44.836: W/System.err(545):  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
07-18 15:43:44.836: W/System.err(545): Caused by: java.io.FileNotFoundException: http://straightrazorplace.com/srpwiki/index.$
07-18 15:43:44.836: W/System.err(545):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getIn$
07-18 15:43:44.836: W/System.err(545):  at uk.co.redfruit.libraries.srpDB.SRPDBClient.getContent(SRPDBClient.java:106)
07-18 15:43:44.836: W/System.err(545):  ... 13 more

Android 4.x 以降でこれが発生するように見えるバグを認識していますが、Gingerbread で実行するとまったく同じエラーが発生します。

エラーの原因となるコードは次のとおりです。

StringBuilder stringBuilder = null;
        try {
            URL url = new URL(targetURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            stringBuilder = new StringBuilder();
            String content = null;
            while ((content = reader.readLine()) != null) {
                stringBuilder.append(content + "\n");
            }
            reader.close();
        } catch (IOException e) {
            throw new SRBClientException(e);
        }

マニフェストに INTERNET アクセス許可があり、URL が存在します。ブラウザーでアクセスできます。どこが間違っているのか、何が欠けているのか誰にもわかりますか?

更新:回避策として基本的な http クライアントを使用してみました。うまくいきませんでしたが、まったく別のエラーが発生しました。403 を取得していたことが示されました。前回の試行では単純に FileNotFound になりましたが、返された html エラー メッセージを (明らかに) JSON として解析できなかったため、今回も JSON 例外が発生しました。

これはサーバー側の問題だと思いますが、Androidで403が発生する理由については困惑していますが、他のコンテキストではありません...

4

2 に答える 2

0

サーバーは、デフォルトのユーザー エージェントが何であれ (おそらく何もない?) ブロックし、403 を返していたことが判明しました。

標準のブラウザー ユーザー エージェント (この場合は Chrome を使用) に設定すると、機能しました。

于 2013-07-20T19:08:42.963 に答える
0

サーバーが 404 (およびその他のコード) を返すと、FileNotFoundException がスローされます。テストが到達しようとしていると推測しているためhttp://straightrazorplace.com/srpwiki/index.html、Chrome で 404 が返されます。

于 2013-07-18T15:05:01.023 に答える