我想测试UserService
的注册方法,该方法类似于以下内容。
@Transactional
override fun register(userRegistration: UserRegistration): AuthDto {
val user = userRegistration.toUserEntity()
return try {
val entity = userRepository.save(user)
//entityManager.flush()
val id = entity.getIdOrThrow().toString()
val jwt = jwtService.createJwt(id)
entity.toAuthDto(jwt)
} catch (ex: PersistenceException) {
throw UserRegistrationException(userRegistration.username, ex)
}
}
由于
userName
实体的User
上有一个唯一索引,因此我想断言,注册已经存在的userName时会引发异常。在这种情况下,我尝试捕获引发的任何异常并重新抛出自己的异常。现在,我的测试仅使用现有的userName并调用注册。
@Test fun `register twice - should throw`() {
val existingRegistration = UserRegistration(testUserAdminName, "some", "test")
assertThrows<UserRegistrationException> {
userService.register(existingRegistration)
//entityManager.flush()
}
}
但是,除非我通过实体管理器显式刷新,否则不会引发任何异常。但是,我该如何抛出自己的异常?
我应该在UserService中使用flush吗?
最佳答案
答案来自M. Deinum。
我切换到JpaRepository
,现在正在使用saveAndFlush
。