简单单元测试中的 URLUtil.isHttpsUrl() 错误返回值?(返回默认值=真)

soe*_*oey 3 java android unit-testing

也许这是有史以来最荒谬的问题,或者我不能再直接思考了 - 但是在使用URLUtil.isHttpsUrl()from时我经历了一个非常奇怪的行为android.webkit

我正在为我的项目编写一些单元测试,并检测到一个方法返回了一个意外的值,因为 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://");
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我只是URLUtil.isHttpsUrl()android.webkit包中复制了。

我已经将它与compileSdkVersion 25和一起使用了compileSdkVersion 24。`URLUtil.isHttpUrl() 也会发生同样的情况

我已经尝试清理+重建项目,重新启动+使AS缓存失效。

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

或者 Unittest 类可能有问题? 这是一个简单的 JUnit 测试,我returnDefaultValues在 gradle 中这样设置:

    android {
      ...
      ...
      testOptions {
        unitTests.returnDefaultValues = true
      }
    }
Run Code Online (Sandbox Code Playgroud)

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

soe*_*oey 5

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

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

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