Spring Data Repository не удаляет элемент в тестах - PullRequest
0 голосов
/ 15 ноября 2018

мы пытаемся написать тесты для нашего весеннего загрузочного приложения, и столкнулись с очень специфической и странной проблемой. Нам нужно протестировать наши репозитории и использовать аннотацию Spring @DataJpaTest для быстрого создания базы данных h2 в памяти и получения связанных bean-компонентов. Но в одном из наших тестов, когда мы пытаемся удалить объект с помощью репозитория Spring, он не удаляется. Когда мы обычно запускаем приложение и пытаемся удалить его с помощью запроса REST на наши контроллеры, оно работает как чудо, но в тестах это не так.

Когда мы удаляем аннотацию @DataJpaTest и заменяем ее на пару других аннотаций, это работает. Это не рабочая установка

@RunWith(SpringRunner.class)
@DataJpaTest
public class NodeInfoServiceIT {
       //Some tests here
@Test
public void deleteNode_deleteNode_returnSuccessMessage() {
    //We create our Service annotated class in here by hand, and call delete
    //node function and check whether it is deleted or not, but it isn't
}

deleteNode выполняет некоторую проверку крайних случаев и просто вызывает delete в нашем весеннем репозитории. Нам удалось это сделать, немного изменив аннотации, но это шатко, и здесь неоптимальны рабочие аннотации:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApplication.class)
@TestPropertySource(
    locations = "classpath:integrationtest-application.properties")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

и указанный application.properties довольно прост:

spring.datasource.url = jdbc:h2:mem:test
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect

Если мы поместим @Transactional поверх нашего тестового класса, он будет работать как в аннотированном состоянии. Если мы не добавим аннотацию @DirtiesContext, она не будет работать, поскольку мы помещаем одни и те же данные для всех наших тестов, а когда они пытаются внедрить данные, это завершается неудачей с ограничением, которое не является удовлетворительным исключением. У меня вопрос, в чем проблема с первым методом аннотации и как я могу это исправить.

Спасибо.

...