How to ensure load time weaving takes place for Eclipselink when using SpringBootTest with other tests running beforethe Spring one

[亡魂溺海] 提交于 2019-12-24 08:36:02

问题


I'm using Spring Rest Docs to generate documentation for my REST services. This involves running unit(strictly integration) tests that run against a live Spring Boot Container that is kicked off by the test. The test class looks like this:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MySpringConfiguration.class)
@WebAppConfiguration
public class ApiDocumentation {

  private MockMvc mockMvc;

  @Rule
  public final JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation("target/generated-snippets");

  @Autowired
  private WebApplicationContext context;

  @Autowired
  private ObjectMapper objectMapper;

  @Before
  public void setUp() {
      this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
            .apply(documentationConfiguration(this.restDocumentation))
            .build();
  }


  @Test
  public void testSomething() throws Exception {
  }
}

The application uses JPA with EclipseLink for the EntityManager implementation.

When I run the test standalone in my IDE or as the only test present when I run a Maven build using the maven-surefire-plugin everything works fine.

However it's not the only test I want to run in the suite. As soon as I run other tests in the suite I come across the issue mentioned here, namely

"Spring's agent does not initialize the persistence context until the application accesses the Spring context. If the application has already triggered the loading of the persistent class before accessing the Spring context, weaving will not occur."

and get errors like this:

Exception Description: The method [_persistence_set_someField_vh] or [_persistence_get_someField_vh] is not defined in the object [mypackage.MyEntity].

So what do people normally do to get around this ? Run SpringBootTest classes in a different module to unit tests that access entities ?


回答1:


As far as I concerned problem caused by dynamic weaving, if you make it static it should work proper. Possibly it could help you



来源:https://stackoverflow.com/questions/39891205/how-to-ensure-load-time-weaving-takes-place-for-eclipselink-when-using-springboo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!