DBRider не очищает данные перед запуском новых классов тестов, как я могу это исправить? - PullRequest
0 голосов
/ 07 февраля 2020

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

О классе:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {MyServiceTestApplication.class})
@ActiveProfiles({"test"})
@EnableTestAuthentication
@DBRider
@DBUnit(allowEmptyFields = true)
public class MyControllerIT {

О методах тестирования:

@Test
@DataSet(value = {"datasets/files.json", "datasets/setting.json"})
public void testGetMyDeltaInfo(){

После первого запуска тестов база данных возвращается 0 строк из каждой хранимой процедуры в следующих двух наборах тестов.
Если я запускаю три набора тестов по одному, все они успешно завершаются, в каждом классе есть от 3 до 8 тестов.
Чего мне не хватает Вот?

Редактировать: я пытался добавить свойство cleanBefore=true к аннотациям @DataSet, но это не имело никакого значения.
Редактировать 2: - Похоже, что проблема может быть до того, как DBRider сделает это предмет; Может быть проблема с привязкой к rabbitmq.

Редактировать 3: Проблема с кроликом была решена, проблема с DBRider все еще существует.
Интересно, что когда я запускаю его на сервере сборки jenkins, проваливаются только последние 2 теста. Когда коллеги запускают его локально на своих машинах, они получают те же результаты, что и я.

1 Ответ

0 голосов
/ 12 февраля 2020

Проблема была вызвана тем, что DBUnit не освобождает соединение db между тестами, что привело к тому, что при следующем запуске не удалось установить соединение с базой данных. Мы до сих пор не уверены, почему это так, поскольку эти тесты работали, как и ожидалось, до того, как мы произвели слияние.
В любом случае это было решено путем добавления свойства cacheConnection к аннотации @DBUnit и установки его в false вроде так:

@DBUnit(allowEmptyFields = true, cacheConnection = false)

...