Интеграционное тестирование DAO INSERT - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно выполнить интеграционный тест для оператора INSERT.
По сути, мне нужен автоматический тест, который гарантирует, что SQL, написанный в этом запросе, действительно верен.
Я не уверен, какнаписать этот интеграционный тест.

Необходимо принять во внимание следующие соображения:

  • Этот метод выполняет тип INSERT типа «забыл и забыл», поэтому модульное тестирование не является IMO.
  • Я не могу написать метод findById, потому что у записи нет идентификатора.Идентификатор бесполезен в моем случае, потому что эти записи никогда не будут получены по идентификатору.Более того, это может вызвать проблему типа «курица и яйцо», поскольку операторы findById или insert могут быть неверными.

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

Я не ищу конкретный код, я ищу правильный концептуальный способ проверки моего sql-запроса, выполненного в коде (в моем случае это Java).
Не могли бы вы дать мне немного?совет?

Код:

public void insertPostStat(PostStat postStat) {
    final String sql = "INSERT INTO post_stat(created_at, geom, google_place_id, google_place_name) " +
            "VALUES(?, ST_SetSRID(ST_MakePoint(? , ? ), 4326), ?, ?";

    KeyHolder holder = new GeneratedKeyHolder();
    SqlParameterSource param = new MapSqlParameterSource()
            .addValue("created_at", postStat.getCreatedAtMs())
            .addValue("longitude", postStat.getLongitude())
            .addValue("latitude", postStat.getLatitutde())
            .addValue("google_place_id", postStat.getGooglePlaceId())
            .addValue("google_place_name", postStat.getGooglePlaceName());
    template.update(sql,param, holder);
}

1 Ответ

0 голосов
/ 25 февраля 2019

Как правило, тестирование вставки включает в себя попытку считывания данных обратно, чтобы убедиться, что они были записаны, как ожидалось.Если нет естественного ключа, вы всегда можете выбрать все столбцы.Если в таблице допускаются повторяющиеся строки, вы должны сначала подсчитать их:

  • начать транзакцию
  • выбрать количество строк, соответствующих критериям.
  • вызвать тестируемый метод
  • выберите количество строк, соответствующих критериям
  • откат tx
  • утверждают, что count2 - count1 = 1

Если таблица не допускает дублирование строк:

  • начало транзакции
  • вызов тестируемого метода
  • чтение строки, соответствующей критериям
  • откат tx
  • строка подтверждениябыло прочитано

Если у вас нет менеджера транзакций, вам нужно почистить вручную: удалите ожидаемую строку как до, так и после запуска функции вставки.

...