如何从java测试代码访问内部属性

时间:2015-11-16 19:54:55

标签: java android unit-testing kotlin

我有一些标有内部属性的课程。 然后我尝试从java中的测试代码设置该属性。 我如何访问这些属性?测试代码和类代码在同一个包中。

示例:

class MainActivity : AppCompatActivity() {
    interal var someProperty = "test"
}

测试代码:

@Test
public void firstStartTest() {
    val activity = MainActivity() 
    activity.setSomeProperty("something") //does not compile

}

Android Studio建议使用activity.setSomeProperty $ production_sources_for_module_app(); 但这也无法编译。

3 个答案:

答案 0 :(得分:1)

两个类(MainActivity和测试类)必须位于一个模块中。这是一个模块定义:

  

更具体地说,模块是一组编译在一起的Kotlin文件:

     
      
  • IntelliJ IDEA模块;
  •   
  • Maven或Gradle项目;
  •   
  • 一组文件   通过一次Ant任务调用编译。
  •   

https://kotlinlang.org/docs/reference/visibility-modifiers.html

这意味着,检查您的项目结构。

答案 1 :(得分:0)

有两种方法可以做到这一点:

  • 设置属性protected。请注意Java和Kotlin如何区别对待protected。在Java中,同一包中的其他类可能会访问protected成员。这样,您的测试类(使用Java)就可以访问它。
  • 通过丑陋的名称访问属性。它应该有点像activity.setSomeProperty$production_...。使用自动完成功能。来自the documentation
      

    内部类的成员需要进行名称修饰   很难意外地从Java使用它们并允许重载   具有相同签名的成员彼此看不见   科特林规则;

答案 2 :(得分:0)

添加@JvmField 注释。 它将变量视为受 Java 保护的