URLUtil.isHttpsUrl()在Simple Unittest中返回错误的值? (returnDefaultValues =真)

时间:2017-08-25 12:45:04

标签: java android unit-testing

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

我正在为我的项目编写一些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://");
    }

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

我已将其与compileSdkVersion 25compileSdkVersion 24一起使用。 “URLUtil.isHttpUrl()

也是如此

我已经尝试清理+重建项目,重启+ AS的无效缓存。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

好吧,看起来甚至静态的Util类都需要一个仪表单元测试。我刚刚在没有testOptions的情况下对其进行了测试,并且知道Method isHttpsUrl in android.webkit.URLUtil not mocked.

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

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