我正在尝试测试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
。