-->

How to ensure load time weaving takes place for Ec

2019-08-01 17:30发布

问题:

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