也許這是有史以來最荒謬的問題,或者我不能直截了當地思考 - 但在使用android.webkit
的URLUtil.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 25
和compileSdkVersion 24
。 與`URLUtil.isHttpUrl()
相同發生了我已經嘗試清理+重建項目,重新啓動+ AS失效緩存。
有人可以解釋發生了什麼嗎?難道我做錯了什麼?
或者Unittest類會出現問題嗎? 這是一個簡單的一個JUnit測試,我已經設置了returnDefaultValues
在gradle這個是這樣的:
android {
...
...
testOptions {
unitTests.returnDefaultValues = true
}
}
雖然,我都會以爲,「上下文相關的」呼叫會得到默認值,但URLUtil.isHttpsUrl()
是靜態並且不涉及任何上下文。
最奇怪的是,我也在使用「URLEncoder.encode(...)」,它是Android SDK的一部分,並且相關的unittests沒有任何嘲諷地工作。 – soey