@VisibleForTesting()函数在使用时不会触发生产代码的编译错误

时间:2018-12-17 01:52:08

标签: java android unit-testing kotlin

对于Android App,我尝试根据https://developer.android.com/reference/android/support/annotation/VisibleForTesting使用@VisibleForTesting()

@VisibleForTesting()
void myFunction(String id) {
    doSomething(id);
}

对Java和Kotlin代码都进行了尝试。

我明确地让生产调用用@VisibleForTesting()注释的public函数。编译时,看不到任何错误或警告会阻止我在生产代码中使用它。

我有什么想念吗?

2 个答案:

答案 0 :(得分:0)

阅读文档:

  

您可以选择指定可见性,如果不进行测试,应该是什么?这样,工具就可以从生产代码中捕获意外访问。

示例:

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
void myFunction(String id) {
    doSomething(id);
}

因此,在您的情况下,您缺少注释中的可选otherwise参数。没有该属性,您将无法执行任何断言以防止生产代码未经授权地调用该方法,因为检查者无法知道应阻止哪种调用。

答案 1 :(得分:0)

这将由Android的Lint声明,默认为警告。

您可以通过将严重性级别提高为build.gradle中的错误来更改它:

android {
    lintOptions {
        error("VisibleForTests")
    }
}