[英]Junit 4 test inner class in kotlin
我使用 Junit4 和 kotlin。
我使用 Enclosed 进行内部类测试。
import org.junit.Test
import org.junit.experimental.runners.Enclosed
import org.junit.runner.RunWith
@RunWith(Enclosed::class)
class SampleTest {
var text = "parent class"
class Class1 {
@Test
fun `print the text`() {
println(text)
}
}
inner class Class2 {
@Test
fun `print the text`() {
println(text)
}
}
}
在 Class1 和 Class2 中,需要text
变量。
我使用inner
来访问子类到父类。
但是我有一个问题,测试功能被删除了,我无法测试。 看照片。
我可以用 Junit4 测试高岭土的内部类吗?
Class1
是一个普通的嵌套类,恰好在SampleTest
。 这只是一个组织方面的事情,您的Class1
实例没有对SampleTest
实例的任何引用,因此它无法访问text
(除非明确传递实例)。
如果您希望嵌套类能够访问这样的封闭实例,则需要将其标记为inner
,就像Class2
。 这样您就可以通过SampleClass
的实例创建Class2
的实例,例如
val sample = SampleClass()
val class2 = sample.Class2()
sample.text = "wow!"
class2.`print the text`()
如果不熟悉,您可以在文档中阅读有关这些内容的信息
所以是的,如果 JUnit 构造一个Class1
实例,它不知道text
是什么,因为它是其他一些不相关类中的实例变量。
我假设它不知道如何创建Class2
,因为它需要一个SampleTest
实例来做到这一点。 Enclosed
所有示例都使用静态嵌套类,就像Java 文档所说:
静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。 实际上,静态嵌套类在行为上是一个顶层类,为了方便打包,它嵌套在另一个顶层类中。
所以这与 Kotlin 的(非内部)嵌套类基本相同,比如你的Class1
。 您可能无法使用inner
类(无论如何都不能组织和自动运行测试)
如果您在类中组织测试(或者只是SampleClass
之外的顶级object
,或者如果您真的需要,则仅在文件的顶级中 - 就在某个地方),您可能希望将text
粘贴在companion object
中任何其他类以“静态”方式访问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.