我正在创建一个问题,就像这样:
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));
当我组装此皮棉并使用它时,它可以正常工作,就像这样:
但是,当我尝试测试该确切代码时,该测试未收到任何警告。这是我的测试:
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的其他测试全部通过,并且看起来完全一样
答案 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方法选择为正确的软件包的有效方法,这意味着可以注册警告。