Spring Boot测试在IntelliJ中运行,但不在Maven中运行,没有默认构造函数HibernateJpaAutoConfiguration

时间:2016-12-07 12:27:25

标签: spring-boot

我有一个问题,我已升级到Spring Boot 1.4.2.RELEASE,我可以让我的所有测试在IntelliJ中正确执行但不在命令行上使用maven。

我有一个CommandLineRunner应用程序,使用JPA,jdbc

我的测试有注释

APPLICATION_ROOT

我有一个扩展BeanConfiguration的TestBeanConfiguration,它只是覆盖了一个用于创建HTTP更新程序的私有方法,并用一个返回测试版本的方法替换它

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestBeanConfiguration.class)

和我的TestBean

@Configuration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = CommandLineRunner.class))
@PropertySource("classpath:application.properties")
public class BeanConfiguration {  ... }

我的测试使用以下

进行注释
@Configuration
@PropertySource("classpath:application.properties")
public class TestBeanConfiguration extends BeanConfiguration { ... }

我已经尝试将我的主控制台运行器类添加到测试注释中的类,但这对测试没有任何影响,而是导致测试执行我的应用程序运行功能,这是不理想的。

所有测试都在IntelliJ中传递,并且在控制台上运行mvn clean包时出现以下错误

http://pastebin.com/iWjhqJrd

似乎没有用于创建HibernateJpaAutoConfiguration类的默认构造函数。很奇怪,因为它是Spring boot 1.4.2.RELEASE的一部分,但没有默认的构造函数。

以前在旧版本的Spring Boot中,我在BeanConfiguration类上使用了SpringBootApplication。

我也尝试了以下

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestBeanConfiguration.class)

这个配置的问题在于它不允许我将EntityManager注入到我的JDBC存储库中,因此我可以将我的JPA注释对象与原始.sql文件一起使用,而不是使用@Query注释,因为它们对于大型是笨重的查询。它在这里抛出一个NullPointer

@Configuration
@EnableJpaRepositories("com.which.uploader")
@EntityScan("com.which.uploader")
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = CommandLineRunner.class))
@PropertySource("classpath:application.properties")
public class BeanConfiguration { ... }

修改

这似乎是从1.3.1迁移到1.4.2 sring-boot-starter-parent的问题。我检查了一个较旧的工作版本,这个更改导致NoSuchMethodException并将其更改回来似乎解决了它。

更改为1.3.8.RELEASE也适用于上述配置。只需将测试配置更改回较旧的注释

@Component
public class JdbcRepository {

    @Autowired
    private ResourceLoader resourceLoader;

    @PersistenceContext
    private EntityManager em;

....}

0 个答案:

没有答案