提问者:小点点

与@SpringBootTest一起使用时去除@DataJpaTest的推荐方法


我们有一个依赖于 Spring Boot 2.0 的应用程序。我们正在将其从 JDK8 迁移到 JDK11。这也使我们能够将 Spring Boot 从 2.0 更新到 2.1。在阅读了更新日志后,似乎我们需要进行任何重大更改。

现在问题出在一些测试类同时用< code>@SpringBootTest和< code>@DataJpaTest注释的地方。根据这一点以及文档,我们不应该一起使用这两者,而是将< code>@DataJpaTest改为< code > @ 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

因此,根据这个答案,我们做了这样的事情:

@EnableJpaRepositories(basePackages="com.test", entityManagerFactoryRef="entityManagerFactory")

即使在这之后,我们仍然以同样的错误结束。这是删除< code>@DataJpaTest的正确方法吗?或者我们需要移除< code>@SpringBootTest并做些别的事情吗?非常感谢任何形式的指导。


共1个答案

匿名用户

测试类使用@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" />