[英]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.