Как добавить пути сгенерированных DTO в путь к классам для тестов Spring Boot?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как добавить пути сгенерированных DTO в путь к классам для тестов Spring Boot?

Сообщение Anonymous »

Я пишу тесты и не могу изменить существующий код.
Мой текущий проект использует OpenAPI для создания DTO на основе описаний YAML.
Эти DTO расположены в папке /target и они не являются управляемыми Spring bean-компонентами.
Объекты ссылаются на эти DTO, например:
@Entity
@Table(name = "...", schema = "...")
public class MyEntity Serializable {

@Basic
@Column(name = "status")
@Enumerated(EnumType.STRING)
private Status status;

@Basic
@Type(JsonBinaryType.class)
@Column(name = "history", columnDefinition = "jsonb", updatable = false)
private List history = new ArrayList();

@Basic
@Type(JsonBinaryType.class)
@Column(name = "users", columnDefinition = "jsonb")
private UserDTO users = new UserDTO();

...

Теперь, когда я пытаюсь написать интеграционные тесты (например, тесты Entity или тесты репозитория), я получаю сообщение об ошибке. Если я укажу DTO в конфигурации (что, вероятно, неверно, поскольку это не bean-компонент):
@Bean
public HistoryDTO getHistoryDTO() {
return new HistoryDTO();
}

Тогда возникает эта ошибка:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed
to класс конфигурации синтаксического анализа [....EntityTestConfiguration] в
org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)
~[spring-context-6.1.2.jar:6.1.2] Вызвано:
java.lang .NoClassDefFoundError: ../HistoryDTO

Если я не указывайте DTO в конфигурации, то возникает эта ошибка:

org.springframework.beans.factory.BeanCreationException: Error
создание bean-компонента с именем 'entityManagerFactory' определен в пути к классу
resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
Невозможно загрузить класс [...MyEntity] в
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773)
~[spring-beans-6.1.2 .jar:6.1.2] Причина:
java.lang.TypeNotPresentException: Тип ....HistoryDTO отсутствует

Как добавить сгенерированные DTO в путь к классам для тестов Spring Boot? Правильно ли вообще, если сущности ссылаются на DTO?
Я пытаюсь начать примерно с этого:
@ComponentScan(basePackages = {"....entity"})
@EnableAutoConfiguration
public class EntityTestConfiguration {

@Bean
public MyEntity getMyEntity() {
return new MyEntity();
}

// @Bean
// public HistoryDTO getHistoryDTO() {
// return new HistoryDTO();
// }
}

@DataJpaTest
@ContextConfiguration(classes = {EntityTestConfiguration.class})
@Import(MyEntity.class)
class MyEntityTest {

@Autowired
private TestEntityManager em;

@Test
void test() {
var entity = new MyEntity();
entity.setSomeField(true);

assertNotNull(em);
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... boot-tests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»