Java 简单单元测试中的URLUtil.isHttpsUrl()返回值错误?(returnDefaultValues=true)

Java 简单单元测试中的URLUtil.isHttpsUrl()返回值错误?(returnDefaultValues=true),java,android,unit-testing,Java,Android,Unit Testing,也许这是有史以来最荒谬的问题,或者我再也不能直截了当地思考了——但我在使用android.webkit中的URLUtil.isHttpsUrl()时遇到了一个非常奇怪的行为 我正在为我的项目编写一些单元测试,并检测到一个方法返回了一个意外的值,因为URL被认为是无效的 为了缩小范围,我最终得到了这样一个简单的测试用例: @Test public void testSimpleHttpsCheck() { String url = "https://www.this.i

也许这是有史以来最荒谬的问题,或者我再也不能直截了当地思考了——但我在使用android.webkit中的
URLUtil.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 {
      ...
      ...
      testOptions {
        unitTests.returnDefaultValues = true
      }
    }
如您所见,我只是从
android.webkit
包中复制了
URLUtil.isHttpsUrl()

我在
compilesdkversion25
compilesdkversion24
中使用过它。 “URLUtil.isHttpUrl()也会发生同样的情况

我已经尝试清理并重建项目,重新启动并使AS的缓存无效

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

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

    @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 {
      ...
      ...
      testOptions {
        unitTests.returnDefaultValues = true
      }
    }

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

好的,似乎即使是静态的Util类也需要插入指令的单元测试。我只是在没有使用
testOptions
的情况下测试了它,现在它在android.webkit.URLUtil中显示了
方法isHttpsUrl not mocked。

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


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

最奇怪的是,我也在使用“urlcoder.encode(…)”,它是Android SDK的一部分,相关的单元测试在没有任何模仿的情况下工作。。