为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin Lint 测试失败,即使它在生产中有效

Kotlin Lint 测试失败,即使它在生产中有效

墨色风雨 2023-04-26 14:14:31
我正在创建一个问题,如下所示: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 的其他测试都通过了,据我所知,它们看起来完全一样
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

事实证明它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 选择为正确包的有效方法,这意味着可以注册警告。


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信