【发布时间】:2019-04-15 04:30:02
【问题描述】:
您好,我有一个名为 UserServiceTest 的测试类,其中包含注入上述模拟的 userService 类,并且该测试类中的测试工作正常。
@RunWith(MockitoJUnitRunner::class)
class UserServiceTest {
lateinit var login: Login
@Mock
lateinit var userRepository: UserRepository
@Mock
lateinit var emailService: EmailService
@InjectMocks
lateinit var userService: UserService
@Before
fun setup() {
login = Login(email = "mohanraj@gmail.com", password = "qwerty"
}
我还有另一个名为 AdminServiceTests 的测试类,其中包含注入上述模拟的 AdminServiceClass,该模拟还包含 userService 类
@RunWith(MockitoJUnitRunner::class)
class AdminServiceTests {
lateinit var user: User
@Mock
lateinit var userRepository: UserRepository
@Mock
lateinit var adminRepository: AdminRepository
@Mock
lateinit var userService: UserService
@InjectMocks
lateinit var adminService: AdminService
@Before
fun setup() {
this.createAdmin = CreateAdmin().apply {
email = "admin@gmail.com"
name = "admin"
password = "qwerty"
phone = 98345678899
}
}
@Test
fun testCreateAdmin() {
val result = adminService.createAdmin(createAdmin)
Assert.assertEquals(true, result)
}
当我运行测试时,adminService.createAdmin(createAdmin) 调用了 adminService 中的一个函数,该函数调用了 userService 中的一个函数
fun createAdmin(newUser: CreateAdmin): Boolean {
val user = userService.getUser(newUser)
if (userService.createUser(user)) { // calls a function in user service
this.saveAdmin(user.id)
return true
}
return false
}
我想从 testCreateAdmin 函数中调用 userService 中的一个函数,但是我作为 @Mock 包含的用户服务本身包含一些依赖项,它是 adminService 的依赖项,所以当我调试 @Mock userService 对象时包含 null因此不会调用 userService 中的函数。那么如何将依赖项注入userService并将其注入adminService..请帮助
userService = {UserService$MockitoMock$825690330@2479}
mockitoInterceptor = {MockMethodInterceptor@2532}
userRepository = null
emailService = null
【问题讨论】:
-
UserService在你的AdminServiceTests中被模拟,所以它的原始行为被替换为你配置的任何东西(当这个然后那个),或者如果你做了默认行为不指定任何内容,在您的情况下userService.createUser(user)将返回默认布尔值false。所以是的,原始方法不在模拟中调用是正常的,除非you actually specify that,如果这实际上是你真正想要的。
标签: spring-boot kotlin mockito