我試圖為一些出現 Stackoverflow 錯誤的模型類撰寫測驗用例,我發現這是遞回呼叫的問題,但我不確定是否是這種情況?任何人都可以幫我撰寫測驗用例遞回呼叫。任何人都可以在下面的示例代碼中幫助我,我該如何解決它?
注意:我在分配資料函式的 getComponentsData() 上收到 StackOverflow 錯誤。
class ComponentTest {
lateinit var classUnderTest: ComponentTest
@Before
fun setUp() {
classUnderTest = ComponentTest()
}
@Test
fun `test to convert Component with one set Component`() {
val component = getComponentsData()
val result = classUnderTest.convert(component)
testComponent(result)
}
private fun testComponent(result: ContentComponentBO?) {
Assert.assertNotNull(result)
Assert.assertEquals("taggingGroup",
result?.taggingGroup)
Assert.assertEquals("componentType",
result?.componentType)
testCollection(result?.collection?.first())
}
private fun getComponentsData(): Component {
return Component().apply {
taggingGroup = "taggingGroup"
componentType = "componentType"
collection = listOf(getCollectionData())
name = "name"
headerText = "headerText"
pageHeader = "pageHeader"
iroaButton = getCollectionData()
isOpenInOverlay = false
overlayHeader = "overlayHeader"
}
}
private fun getCollectionData(): Collection {
return Collection().apply {
defaultGroup = false
groupName = "groupName"
collection = listOf(getCollectionData())
isOpenInOverlay = true
image2ShoppingCategory = "image2ShoppingCategory"
components = listOf(getComponentsData())
categoryName = "categoryName"
}
}
}
uj5u.com熱心網友回復:
讓我們嘗試描述呼叫堆疊的一部分:
`test to convert Component with one set Component` calls getComponentsData()
getComponentsData() calls getCollectionData() to set iroaButton
這是有趣的部分,你有兩個潛在的問題。我說潛力是因為我可以部分訪問代碼,但在以下情況下您似乎遇到了一個問題:
getCollectionData() calls getCollectionData() to set collection
then getCollectionData() calls getCollectionData() to set collection
then getCollectionData() calls getCollectionData() to set collection
then getCollectionData() calls getCollectionData() to set collection
then getCollectionData() calls getCollectionData() to set collection
??
然后當
getCollectionData() calls getComponentsData() to set components
getComponentsData() calls getCollectionData() to set iroaButton
then getCollectionData() calls getComponentsData() to set components
then getComponentsData() calls getCollectionData() to set iroaButton
then getCollectionData() calls getComponentsData() to set components
then getComponentsData() calls getCollectionData() to set iroaButton
??
您的代碼存在遞回問題。
遞回意味著“根據自身定義問題”。
換句話說,我們可以將遞回的思想提煉成兩個簡單的規則:
- 每個遞回呼叫都應該針對同一問題的較小實體,即較小的子問題。
- 遞回呼叫最終必須達到基本情況,無需進一步遞回即可解決。
您的代碼的問題是沒有基本案例。getCollectionData() 方法呼叫 getCollectionData() 并卡住,直到堆疊溢位,因為沒有什么可以讓您的代碼停止。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466452.html
上一篇:如果失敗,請多次運行Jest測驗
