Как предотвратить удаление данных при использовании DBUnit - PullRequest
1 голос
/ 08 марта 2019

Я использую Spring Boot с жидкой базой.

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

Я приведу пример, я уже вставил пять авторов в базу данных. Тест без DBUnit:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AuthorsManagerTest {

    @Autowired
    private AuthorsManager authorsManager;

    @Test
    public void getAllAuthors() {
        List<Author> authors = authorsManager.getAllAuthors().collect(Collectors.toList());
        assertFalse(authors.isEmpty());
        assertEquals(5, authors.size());    // 5!
    }
}

Другой тест, который я использую DBUnit, чтобы добавить еще один, но все пять удаляются, и вставляются только те авторы, которые находятся в DBUnit:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners({
        TransactionalTestExecutionListener.class,
        DependencyInjectionTestExecutionListener.class,
        DbUnitTestExecutionListener.class
})
@DatabaseSetup("/dbunit/books_authors.xml") // add dbunit file
public class AuthorsManagerTest {

    @Autowired
    private AuthorsManager authorsManager;

    @Test
    public void getAllAuthors() {
        List<Author> authors = authorsManager.getAllAuthors().collect(Collectors.toList());
        assertFalse(authors.isEmpty());
        assertEquals(1, authors.size());    // only one!
    }
}

Файл DBUnit:

<dataset>
    <Authors id="200" name="My Author" />
</dataset>

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

1 Ответ

2 голосов
/ 08 марта 2019

Попробуйте использовать следующее:

@DatabaseSetup("/dbunit/books_authors.xml", type = DatabaseOperation.INSERT)

, поскольку вы не устанавливаете type, вы используете значение по умолчанию для этого поля, которое составляет CLEAN_INSERT.

Источник: JavaDoc

...