我有一个问题,我已升级到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包时出现以下错误
似乎没有用于创建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;
....}