【问题标题】:Why Junit cases are failed on jenkins, but successed in my local为什么 Junit 案例在 jenkins 上失败,但在我的本地成功
【发布时间】:2014-02-27 21:15:06
【问题描述】:

我有一些 junit 测试用例在 jenkins 上运行,但其中一些在 jenkins 上失败了,但是我让它们在我的本地笔记本电脑上成功运行。org.hibernate.SessionException: Session is closed! at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1688) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347) at com.test.ui.struts.module.config.ReadAction.executeImpl(ReadAction.java:144) at com.test.ui.struts.module.config.CrudDataAction.execute(CrudDataAction.java:120)

这是我在 ReadAction.java 中的代码

 session = sf.getCurrentSession();
    try
    {
        if (!session.getTransaction().isActive())
            session.beginTransaction();
        Criteria c = session.createCriteria(metaBean.getEntityName());
        setProjection(metaBean, c);

        // fetch 1 more row than we can return to see if we have limited the result set
        c.setMaxResults(_maxRows + 1);
        c.add(getRestrictions(metaBean, reqBean));
        List result = c.list();//This is line 144

我看不出有什么理由让会议在这里结束,有什么理想吗?

【问题讨论】:

  • 当您使用单元测试来练习您的代码时,您不应该使用休眠连接到一个真实的数据库。相反,应该通过集成测试来执行此类代码。也就是说,您最可能的原因是您的单元测试环境和 jenkins 环境之间存在与休眠相关的配置差异。
  • 我认为在 jenkins 服务器上设置数据库并针对数据库运行 junit 测试用例没有任何问题。
  • 另外,我认为这不是配置问题,我很确定,如果是配置问题,所有的junit用例都会失败。
  • Jenkins 是否有可能并行运行您的测试并以某种方式在线程之间共享会话?
  • 是的,我也有这种感觉,但是根据日志信息,jenkins是异步运行的。

标签: java hibernate junit jenkins hibernate-session


【解决方案1】:

测试期间不要连接数据库。测试应该轻量运行,并且最多需要 18 秒才能运行。应该使用 Mockito 或 PowerMockito,它也应该用于相同的用途。由于 jenkins 执行许多并行任务,因此 UT 很可能在您的本地而不是 CI 上运行。使用 PowerMockito 可能会修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2020-11-12
    • 2020-10-05
    • 1970-01-01
    • 2015-03-26
    • 2017-03-04
    相关资源
    最近更新 更多