Kotlin Lint Test失败,即使它可以在生产中使用

时间:2019-07-27 10:12:48

标签: java kotlin lint

我正在创建一个问题,就像这样:

public static final Issue ISSUE_PUT_BOOLEAN =
            Issue.create("NotUsingSet", "Don't use putPrimitive",
                    "Use .set() instead.",
                    Category.MESSAGES, 6, Severity.WARNING,
                    new Implementation(WrongPrefUsageDetector.class, Scope.JAVA_FILE_SCOPE));

当我组装此皮棉并使用它时,它可以正常工作,就像这样:

Lint Warning working correctly

但是,当我尝试测试该确切代码时,该测试未收到任何警告。这是我的测试:

private val PUT_STUB = kotlin("""
      |package com.example.package
      |
      |import com.example.package.Prefs
      |
      |private fun putPrimitive() {
      |    Prefs(context).putBoolean("hi", true)
      |}""".trimMargin())

    @Test
    fun usingPutBoolean() {

        lint()
            .files(PUT_STUB)
            .issues(WrongPrefUsageDetector.ISSUE_PUT_BOOLEAN)
            .run()
            .expect("""1 warning or anything""".trimMargin())

    }

但是我得到的实际结果是“没有警告”。

我是否以某种方式传递了错误的存根?如何诊断生产方案和测试方案之间差异的原因?据我所知,我对LintChecks的其他测试全部通过,并且看起来完全一样

1 个答案:

答案 0 :(得分:0)

事实证明import com.example.package.Prefs无效,因为我的lint-check测试类无法访问此程序包。因此,Prefs类不被视为有效的类,因此putBoolean()方法也不被视为进行评估的有效方法。

不建议在此处添加依赖项。相反,您应该在测试类中创建的Stub中定义自己的类,如下所示:

private val PREFERENCES_STUB_2 = kotlin("""
    |package com.example.package
    |
    |class Prefs {
    |
    |    fun putBoolean(key: String, value: Boolean) {}
    |    
    |    fun doWrongs() {
    |
    |        Prefs().putBoolean("abc", true)
    |    }
    |}""".trimMargin())

现在,Lint Issue将putBoolean方法选择为正确的软件包的有效方法,这意味着可以注册警告。