2017-08-25 9 views
1

おそらくこれは今までの中で最もばかげた質問です。まったくまっすぐ考えることはできませんが、android.webkitURLUtil.isHttpsUrl()を使用すると非常に奇妙な現象が発生しました。URLUtil.isHttpsUrl()Simple Unittestの戻り値が間違っていますか? (returnDefaultValues = true)

私はプロジェクトのUnittestをいくつか書いていて、URLが有効ではないと考えられるため、メソッドが予期しない値を返したことが検出されました。

物事を絞り込むしようとすると、私はこのような単純なテストケースになってしまった:あなたが見ることができるように

@Test 
    public void testSimpleHttpsCheck() { 
     String url = "https://www.this.ishttps.com"; 
     Assert.assertTrue(isHttpsUrl(url)); // returns true 
     Assert.assertTrue(URLUtil.isHttpsUrl(url)); // returns false 
    } 

    // this is a local copy of isHttpsUrl: 
    // it is simple copied from the original URLUtil (SDK 25) 
    private boolean isHttpsUrl(String url) { 
    return (null != url) && 
      (url.length() > 7) && 
      url.substring(0, 8).equalsIgnoreCase("https://"); 
    } 

、私は単にandroid.webkitパッケージからURLUtil.isHttpsUrl()をコピーしました。

compileSdkVersion 25compileSdkVersion 24で使用しました。 `URLUtil.isHttpUrl()と同じです。

私はすでにプロジェクトを再構築しようとしましたが、再起動した+ ASの無効化されたキャッシュを再構築しました。

誰かが何が起こっているのか説明できますか?私は何か間違っているのですか?

Unittestクラスに問題がある可能性がありますか? それは、単純なJUnitテストであり、私はこのようなGradleのでreturnDefaultValuesを設定している:

android { 
     ... 
     ... 
     testOptions { 
     unitTests.returnDefaultValues = true 
     } 
    } 

私は、「コンテキスト関連」の呼び出しは、デフォルト値を取得すると仮定しているだろうが、URLUtil.isHttpsUrl()がある、が、静的であり、いかなる文脈も含まない。

答えて

0

でも、静的なUtilクラスでもInstrumented Unit Testが必要です。私はちょうどtestOptionsせずにそれをテストし、それがあなたを悩ませて申し訳ありませんMethod isHttpsUrl in android.webkit.URLUtil not mocked.

が、私はちょうど私が私の質問を投稿する準備ができていたとき、それはtestOptionsとは何かを持っていることができることを実現してきたと言う知っています。 2時間のデバッグ後、私のプログラミングスキルに対する信頼がほとんど失われました。

誰かがこの回答を使うことができますが、単純なUnittestケースではあまり時間を無駄にしないでください。

+0

もっとも奇妙なことですが、私はAndroid SDKの一部である「URLEncoder.encode(...)」も使用しています。関連するユニットテストは何の疑いもなく働いています。 – soey

関連する問題