我正在尝试测试JAX-RS应用程序,但我不希望模拟数据,特别是因为现有的buildData有一个@DataJpaTest方法

到目前为止,我正在尝试以下操作:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
    classes = MyApp.class
)
@DirtiesContext
@DataJpaTest
public class MyResourceTest {


我收到以下错误


  java.lang.IllegalStateException:配置错误:为测试类[app.MyResourceTest]找到了@BootstrapWith的多个声明:[@ org.springframework.test.context.BootstrapWith(value = class org.springframework.boot.test.context.SpringBootTestContextBootstrapper ),@ org.springframework.test.context.BootstrapWith(value = class org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper)]


我看到的其他类似的对象不谈论webEnvironment设置:


How do I import configuration classes in a @DataJpaTest in a SpringBootTest?
Recommended way to remove @DataJpaTest when used along with @SpringBootTest


有一种使用@AutoConfigureTestDatabase的解决方案,但是当我这样做时,只有第一个可行,因为buildData@Before注释(与@DataJpaTest相同),因为我希望在每次测试之前将数据保持原始状态,所以我可以执行失败方案。

切换到@BeforeClass也不起作用,因为我将无法使用@Autowire Repository对象。

最佳答案

@DataJpaTest文档指出以下内容:


  如果要加载完整的应用程序配置,但使用嵌入式数据库,则应考虑将@SpringBootTest@AutoConfigureTestDatabase结合使用,而不是此注释。




请记住,@DataJpaTest@Transactional@DirtiesContext注释。因此,您可能需要这些注释以及@AutoConfigureTestDatabase

08-07 03:11