Mock a Service class with dependencies in another Service Class Mockito

Viewed 1636

I want to Mock a Service class with dependencies in another Service Class Mockito.

UserService Class

@Service
class UserService(
    val userRepository: UserRepository,
    val userRoleRepository: UserRoleRepository,
    val jwtGenerator: JwtGenerator,
    val emailService: EmailService
)

AdminService Class

@Service
class AdminService(
    val userService: UserService,
    val userRepository: UserRepository,
    val adminRepository: AdminRepository
)

Now I'm trying to write unit test with these classes as follows

@RunWith(MockitoJUnitRunner::class)
class AdminServiceTests {

private lateinit var createAdmin: CreateAdmin

@Mock
lateinit var userRepository: UserRepository

@Mock
lateinit var userRoleRepository: UserRoleRepository

@Mock
lateinit var jwtGenerator: JwtGenerator

@Mock
lateinit var emailService: EmailService

@InjectMocks
lateinit var userService: UserService

@Mock
lateinit var userRepository: UserRepository // Conflicting declarations

@Mock
lateinit var adminRepository: AdminRepository

@InjectMocks
lateinit var adminService: AdminService

@Before
fun setup() {
    this.createAdmin = CreateAdmin().apply {
        email = "admin@gmail.com"
        name = "admin"
        password = "qwerty"
        phone = 9873555555555
    }
}

@Test
fun testCreateAdmin() {
    val result = adminService.createAdmin(createAdmin)
    Assert.assertEquals(true, result)
}
}

Please advice how to mock the userService inside AdminService with all the four dependencies injected

2 Answers

You can create object of UserService with its dependencies as mocked objects and then use it as a dependency in AdminServiceTests.

If you're using Gradle & Spring, add this plugin to your build.gradle

plugins {
    kotlin("plugin.spring") version "1.3.72"
}

Mockito should then work without having to mock the dependencies of the service:

val userService = Mockito.mock(UserService::class.java)
Related