我们有一个依赖于Spring Boot 2.0的应用程序。我们正在将其从JDK8迁移到JDK11。这也使我们能够将Spring Boot从2.0更新到2.1。阅读变更日志后,我们似乎需要进行任何重大更改。
现在的问题在于,有些测试类同时使用@SpringBootTest
和@DataJpaTest
进行注释。根据this和文档,我们不应该将两者同时使用,而是将@DataJpaTest
更改为@AutoConfigureTestDatabase
。代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {A.class, B.class}, properties = {
"x=xxx",
"y=yyy"
})
@AutoConfigureTestDatabase // Used to be @DataJpaTest
@EnableJpaRepositories("com.test")
@EntityScan("com.test")
public class Test {
@TestConfiguration
public static class TestConfig {
// Some beans returning
}
// Tests
}
现在,我们最终遇到以下错误:
NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available
因此,按照this answer,我们执行了以下操作:
@EnableJpaRepositories(basePackages="com.test", entityManagerFactoryRef="entityManagerFactory")
即使在此之后,我们仍然会遇到相同的错误。这是删除
@DataJpaTest
的正确方法吗?还是我们需要删除@SpringBootTest
并执行其他操作?任何形式的指导都值得赞赏。 最佳答案
测试类使用@DataJpaTest和@ContextConfiguration注释
@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(locations = { "classpath:test-context.xml" })
public abstract class AbstractTestCase {
protected static final Logger LOG = LoggerFactory.getLogger(AbstractTestCase.class);
}
我们定义了一个test-context.xml。这是因为testmodule与所有其他模块(多Maven模块项目)隔离。在test-context.xml中,我们定义了基本程序包的组件扫描。
<context:component-scan base-package="de.example.base.package" />
关于java - 与@SpringBootTest一起使用时,删除@DataJpaTest的推荐方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56459713/