与@SpringBootTest结合使用时建议删除@DataJpaTest的方法

时间:2019-06-05 11:36:22

标签: java spring-boot

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

现在问题出在用@SpringBootTest@DataJpaTest注释某些测试类的地方。根据{{​​3}}和文档,我们不应该将两者同时使用,而是将@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,我们做了这样的事情:

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

即使在此之后,我们仍然会遇到相同的错误。这是删除@DataJpaTest的正确方法吗?还是我们需要删除@SpringBootTest并执行其他操作?任何指导都是值得赞赏的。

1 个答案:

答案 0 :(得分: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" />