【问题标题】:Kotlin Lint Test fails, even though it works in productionKotlin Lint 测试失败,即使它在生产中有效
【发布时间】:2019-07-27 10:12:48
【问题描述】:

我正在创建一个问题,如下所示:

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 并使用它时,它可以正常工作,如下所示:

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

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 的其他测试都通过了,它们看起来都一样

【问题讨论】:

    标签: java kotlin lint


    【解决方案1】:

    事实证明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())
    
    

    现在 putBoolean 方法被 Lint Issue 拾取为正确包的有效方法,这意味着可以注册警告。

    【讨论】:

      猜你喜欢
      • 2022-11-06
      • 2017-10-31
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 2010-09-15
      相关资源
      最近更新 更多