URLUtil.isHttpsUrl() 在 Simple Unittest 中返回值错误?(returnDefault



也许这是有史以来最荒谬的问题,或者我只是无法再直接思考 - 但是在使用android.webkitURLUtil.isHttpsUrl()时,我经历了非常奇怪的行为。

我正在为我的项目编写一些单元测试,并检测到某个方法返回了意外值,因为该 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的缓存无效。

有人可以解释一下发生了什么吗?我做错了什么吗?

或者单元测试类可能有问题?这是一个简单的 JUnit 测试,我在 gradle 中设置了returnDefaultValues,如下所示:

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

虽然,我会假设"与上下文相关"的调用会获得默认值,但URLUtil.isHttpsUrl()是静态的,不涉及任何上下文。

好吧,似乎即使是静态的 Util 类也需要一个插桩单元测试。我刚刚在没有testOptions的情况下对其进行了测试,现在它说Method isHttpsUrl in android.webkit.URLUtil not mocked.

很抱歉打扰您,我刚刚意识到这可能与我准备发布问题时的testOptions有关。经过 2 个小时的调试,我几乎对自己的编程技能失去了信心。

希望有人可以使用这个答案,不要在一个简单的单元测试用例上浪费太多时间。

最新更新