Inject dependent class in mapstruct mapper (kotlin)

Viewed 257

How can I inject ReadProcessor class while writing test case for BookMapper

BookMapper.kt

@Mapper(componentModel = "spring")
abstract class BookMapper {

    @Autowired
    lateinit var processor: ReadProcessor

    @Mappings(
        Mapping(target = "name", expression = "java(this.getFullName(entity.getId()))")
    )
    abstract fun entityToReport(entity: BookEntity): BookReport

    fun getFullName(id: String): String {
        return processor.onRead(id)
    }
}

ReadProcessor.kt

class ReadProcessor() {

    fun onRead(id: String): String = "test"
}

BookMapperTest.kt

    @ExtendWith(MockKExtension::class)
    class BookMapperTest {
    
        @MockK
        private lateinit var processor: ReadProcessor
    
        private lateinit var mapper: BookMapper
    
        @BeforeEach
        fun setUp() {
            mapper = Mappers.getMapper(BookMapper::class.java)
        }
    
        @Test
        fun `should map entity to report object`() {
            // Given
            val entity = BookEntity(id="123")
            every { processor.onRead("256") } returns "test"
            // When
            val report = mapper.entityToReport(entity)
            // Then
            assertThat(report.name).isEqualTo("test")
   }
}

when I run above test case it is throwing below error

kotlin.UninitializedPropertyAccessException: lateinit property processor has not been initialized

at BookMapper.getFullName(BookMapper.kt:24)

Kindly let me know how to write test case for this scenario.

Kotlin version: 1.3.70

java version: 1.8

mapstruct version: 1.4.2.Final

Junit-jupiter version : 5.6.2

0 Answers
Related