Spring boot как исключить определенный класс из тестирования - PullRequest
0 голосов
/ 09 мая 2018

Я реализовал собственный класс для представления векторных данных базы данных на основе класса 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: 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. Однако это не совсем лучшая практика для решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

У меня была похожая проблема, и я исключил конфигурацию приложения из моей тестовой конфигурации, так как кажется, что компонент тестовой конфигурации сканирует компонент конфигурации приложения, сканирует классы, которые вы хотите исключить.

0 голосов
/ 09 мая 2018

Просто определите его как @MockBean, чтобы реальная реализация вашего репозитория была заменена бесполезным макетом в ваших тестах:

@MockBean
private MyVectorRepositoryType vectorRepository;
...