繁体   English   中英

Kotlin + SpringBoot:DI lateinit属性服务尚未初始化

[英]Kotlin + SpringBoot : DI lateinit property service has not been initialized

需要帮助解决错误:

kotlin.UninitializedPropertyAccessException: lateinit property ultraService has not been initialized

    at com.example.ultrasonic.service.UltraServiceTest.get all Ultra(UltraServiceTest.kt:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

服务类: https//github.com/swapab/ultrasonic/blob/master/src/main/kotlin/com/example/ultrasonic/service/UltraService.kt

package com.example.ultrasonic.service

import com.example.ultrasonic.domain.Ultra
import com.example.ultrasonic.repository.UltraRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

@Service
class UltraService {

    @Autowired
    private lateinit var UltraRepository: UltraRepository

    fun publish(Ultra: Ultra): Ultra =
            UltraRepository.save(Ultra)

    fun all(): List<Ultra> =
            UltraRepository.findAll()
}

服务类测试: https//github.com/swapab/ultrasonic/blob/master/src/test/kotlin/com/example/ultrasonic/service/UltraServiceTest.kt

package com.example.ultrasonic.service

import com.example.ultrasonic.domain.Ultra
import com.example.ultrasonic.repository.UltraRepository
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.test.context.ContextConfiguration
import java.time.LocalDate

@ContextConfiguration(classes = [UltraService::class])
class UltraServiceTest {

    @Autowired
    lateinit var ultraService: UltraService

    @Mock
    lateinit var UltraRepository: UltraRepository

    lateinit var sampleUltra: Ultra

    lateinit var sampleUltraJsonString: String

    private val mapper = jacksonObjectMapper()

    @Before
    fun setUp() {
        sampleUltra = Ultra(1,
                "latest sample Ultra")

        sampleUltraJsonString = mapper.writeValueAsString(sampleUltra)
    }

    @Test
    fun `get all Ultra`() {

        Mockito.doReturn(listOf(sampleUltra)).`when`(ultraService).all()

        ultraService.all()

        Mockito.verify(UltraRepository).findAll()
    }
}

重现者在这里: https//github.com/swapab/ultrasonic

您是否尝试过对测试类进行注释以使用SpringRunner单元测试工具?

@RunWith(SpringRunner.class)
class UltraServiceTest {

}

请参阅http://www.baeldung.com/spring-boot-testing

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM