我想测试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

10-01 07:30