JpaRepository, могу ли я издеваться над репозиторием, утверждая созданную строку запроса?

#java #jpa #testing #mockito

Вопрос:

Итак, у меня есть приложение, доступное через REST, которое мы используем JpaRepositorylt;Tgt; для хранения и извлечения данных.

Я написал несколько mockMvc тестов, в которых мы проверяем, можно ли достичь конечной точки и вызывается ли репозиторий с правильными параметрами.

Пример:

 mockMvc.perform(put("path")  .contentType(APPLICATION_JSON)  .characterEncoding("UTF8")  .content(t)  ).andExpect(status().isCreated())  .andExpect(content().contentType(APPLICATION_JSON));  Mockito.verify(tRepo.save(t));  

Мне было интересно, есть ли способ/ библиотека, которая позволяет утверждать запрос, который будет создан репозиторием? Поэтому я также могу утверждать, что репозиторий создает правильный sql-оператор. Без использования h2 или контейнерной базы данных?

Пример псевдокода:

 assertEquals(  capturedSqlStatement,  "INSERT INTO t (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);" );   

Комментарии:

1. Даже если это возможно (а я так не думаю), поступая таким образом, вы будете тестировать чужой код (Spring Framework), а не свой.

2. В приведенном мною примере это, очевидно, имело бы место. Однако в проекте, над которым я начал работать, есть гораздо более сложные запросы и вставки, которые заставляют нас сомневаться в том, правильно ли ORM интерпретирует код

3. ORM правильно интерпретирует код, что может быть неправильным, так это код, который не соответствует вашей схеме базы данных. Но это то, что вы можете охватить только с помощью полноценного интеграционного теста.

4. Проблема в том, что SQL может выглядеть по-разному в зависимости от базовой базы данных. ИМХО (и это действительно только мое мнение) тесты базы данных без реальной базы данных не имеют большого смысла

5. Я рассмотрю это, спасибо за замечания.