使用WebTargets的Kotlin UnitTests中的UnitOfWork无法使用

时间:2019-01-16 15:31:54

标签: hibernate unit-testing kotlin dropwizard

我们目前正在Kotlin中尝试我们的第一个dropwizard应用程序。除UnitOfWork注释外,其他一切正常。

如果您使用像Postman这样的简单ApiClient调用它,我们的以下小端点就可以很好地工作:

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

当我们在UnitTest中使用WebTarget调用资源时,这里的问题是userDAO.getUser(user.id)。 DAO看起来像这样:

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

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

因此在getUser(id:Long)中,将调用io.dropwizard.hibernate中AbstractDAO的get方法。基本上就是这个功能:

    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框架或库中进行反思操作时遇到问题,但我不确定反射是否在这里。

谢谢!

0 个答案:

没有答案