UnitOfWork не работает в Kotlin UnitTests с WebTargets - PullRequest
0 голосов
/ 16 января 2019

В настоящее время мы пробуем наше первое приложение dropwizard в Котлине. Все отлично работает, кроме аннотации UnitOfWork.

У нас есть следующая маленькая конечная точка, которая прекрасно работает, если вы вызываете ее с простым ApiClient, как Postman:

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Timed
    @UnitOfWork
    fun getAttributes(@Auth user: User): CoreAttributes {
        return CoreAttributes(userDao.getUser(user.id) ?: throw NotFoundException())
    }

Проблема здесь заключается в userDAO.getUser (user.id), когда мы вызываем Ресурс с WebTarget в UnitTest. DAO выглядит так:

open class UserDAO @Inject constructor(sessionFactory: SessionFactory): AbstractDAO<UserData>(sessionFactory) {

    fun getUser(id: Long): UserData? {
        return get(id)
    }
}

Итак, в getUser (id: Long) вызывается метод get AbstractDAO в io.dropwizard.hibernate. Вот в основном эта функция:

    protected E get(Serializable id) {
        return (E) currentSession().get(entityClass, requireNonNull(id));
    }

И проблема в том, что currentSession () выбрасывает org.hibernate.HibernateException: ни один сеанс в настоящее время не связан с контекстом выполнения Мы называем конечную точку следующим образом в наших модульных тестах:

    val webTarget: WebTarget = target("the-endpoint-url").request().get()

Вызов конечной точки с помощью API-клиента работает. Но вызов конечной точки в наших модульных тестах не работает. Мы делали то же самое в наших java-сервисах, и в java все работает отлично.

Есть идеи по этому поводу? Я читал кое-что о том, что у Kotlin могут быть проблемы с операцией рефлексии в java-фреймворках или библиотеках, но я не уверен, имеет ли место отражение здесь.

Заранее спасибо!

...