我正在使用 Spring Rest Docs 为我的 REST 服务生成文档。这涉及运行单元(严格集成)测试,这些测试针对由测试启动的活动 Spring Boot 容器运行。测试类如下所示:
@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 {
}
}
该应用程序使用 JPA 和 EclipseLink 来实现 EntityManager。
当我在我的 IDE 中独立运行测试时,或者作为我使用 maven-surefire-plugin 运行 Maven 构建时唯一存在的测试时,一切正常。
然而,这不是我想在套件中运行的唯一测试。一旦我在套件中运行其他测试,我就会遇到这里提到的问题,即
“Spring 的代理在应用访问 Spring 上下文之前不会初始化持久化上下文。如果应用在访问 Spring 上下文之前已经触发了持久化类的加载,则不会发生编织。”
并得到这样的错误:
异常描述:方法 [_persistence_set_someField_vh] 或 [_persistence_get_someField_vh] 未在对象 [mypackage.MyEntity] 中定义。
那么人们通常会做什么来解决这个问题呢?在不同的模块中运行 SpringBootTest 类来单元测试访问实体?