【问题标题】:URLUtil.isHttpsUrl() wrong return value in Simple Unittest? (returnDefaultValues=true)简单单元测试中的 URLUtil.isHttpsUrl() 错误返回值? (returnDefaultValues=true)
【发布时间】:2017-08-25 12:45:03
【问题描述】:

也许这是有史以来最荒谬的问题,或者我无法再思考了 - 但我在使用来自 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缓存。

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

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

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

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

【问题讨论】:

    标签: java android unit-testing


    【解决方案1】:

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

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

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

    【讨论】:

    • 最奇怪的是,我也在使用“URLEncoder.encode(...)”,它是 Android SDK 的一部分,并且相关的单元测试在没有任何模拟的情况下工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多