2017-08-25 61 views
1

也許這是有史以來最荒謬的問題,或者我不能直截了當地思考 - 但在使用android.webkitURLUtil.isHttpsUrl()時,我經歷了一個非常奇怪的行爲。簡單單元測試中URLUtil.isHttpsUrl()錯誤的返回值? (returnDefaultValues = true)

我正在爲我的項目編寫一些Unittests,並檢測到一個方法返回了意想不到的值,因爲該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測試,我已經設置了returnDefaultValues在gradle這個是這樣的:

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

最奇怪的是,我也在使用「URLEncoder.encode(...)」,它是Android SDK的一部分,並且相關的unittests沒有任何嘲諷地工作。 – soey

相關問題