【问题标题】:@SpringBootTest interferes with EclipseLink dynamic weaving@SpringBootTest 干扰 EclipseLink 动态编织
【发布时间】:2018-01-04 19:34:32
【问题描述】:

我的公司正在使用 Spring Boot、Spring MVC、带有 EclipseLink 和动态编织的 JPA 开发一个 Web 应用程序。 我的任务是准备 UI 和集成测试的实现,使用 JUnit 和 @SpringBootTest 启动应用程序并使用 Selenium 与之交互。

Spring Boot Testing Features 所述, 使用@SpringBootApplication 注释的测试可以利用@MockBean 注释为ApplicationContext 中的bean 定义Mockito 模拟。 这是通过注册BeanFactoryPostProcessorMockitoPostProcessor 来实现的,递归地扫描带有@Component@Configuration 注释的类以查找带有@MockBean 注释的类和字段。

不幸的是,这会导致这些类中引用的实体类在应该扫描它们的LocalContainerEntityManagerFactoryBean 被实例化并使用LoadTimeWeaver 设置之前被加载,从而导致这些实体的加载时间编织被跳过。 当执行持久性操作时,这会导致 NoSuchMethodExceptions 用于编织创建的方法,例如 _persistence_propertyChange()

是否可以将@SpringBootTest 与 EclipseLink 和动态编织一起使用? 如果不是,那么设置集成测试的好选择是什么 最新的 Spring Boot 版本?

【问题讨论】:

    标签: jpa spring-boot junit eclipselink load-time-weaving


    【解决方案1】:

    我通过使用自定义SpringApplicationRunListenercontextPrepared() 来解决问题,在它们被Spring 执行之前从ApplicationContext 中删除有问题的BeanFactoryPostProcessors。

    【讨论】:

      【解决方案2】:

      我们在使用 Spring Boot 2.1.6 和 EclipseLink 2.7.6 构建的 Web 应用程序中遇到了同样的问题。

      是否可以将@SpringBootTest 与 EclipseLink 和动态编织一起使用?如果没有,为最近的 Spring Boot 版本设置集成测试有什么好的替代方法?

      解决方案是将@SpringBootTest 中的eclipselink.weaving JPA 属性设置为false,并在常规操作中设置为true

      持久化配置:

      <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
          <property name="jpaProperties">
              <props>
                  <prop key="eclipselink.weaving">${jpa.eclipselink.weaving}</prop>
              </props>
          </property>
          <!-- ... -->
      </bean>
      

      然后在application.properties:

      jpa.eclipselink.weaving=true
      

      在 JUnit 测试类上:

      @TestPropertySource(properties = "jpa.eclipselink.weaving=false")
      

      【讨论】:

        猜你喜欢
        • 2011-06-27
        • 2013-08-31
        • 2011-10-25
        • 2012-05-30
        • 1970-01-01
        • 2015-04-13
        • 2015-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多