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