Spring启动如何排除某些类的测试

时间:2018-05-09 09:33:49

标签: spring spring-boot h2 dialect usertype

我已经实现了自己的类来表示基于UserType类的数据库矢量数据。

我的例子:

class MyVectorType implements UserType {
@Override
    public int[] sqlTypes() {
        return new int[] { Types.ARRAY };
    }
};

@Entity
@Table("MY_ENTITY")
public class MyEntity {
    private MyVectorType myVectorType;

}

然而,这个类不能用于测试h2方言,即。在内存数据库中。有错误:没有JDBC类型的Dialect映射:2003。

因此,我想将此实体(包括存储库)排除在测试之外,但这不起作用:

@SpringBootApplication
@ComponentScan(excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {
                MyEntity.class, MyEntityRepository.class})
})
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }
}

有什么问题或是否有解决此问题的最佳做法?

编辑1:修复示例 - 添加了正确的实体和存储库

解决方案1: 我认为目前唯一可行的解​​决方案是将实体类(需要排除)移到其他包中。然后将@EntityScan设置为仅扫描未排除的包。 ComponentScan中的排除过滤器似乎仅适用于@Component类,而不适用于@Entity。但是,这不是解决此问题的绝对最佳做法。

1 个答案:

答案 0 :(得分:3)

只需将其定义为@MockBean,因此您的存储库的实际实现将被测试中的无函数模拟替换:

@MockBean
private MyVectorRepositoryType vectorRepository;