Важно, что мы тестируем наш пользовательский SQL с БД конкретных поставщиков
Поэтому вы должны создать набор тестов для БД каждого поставщика
@RunWith(Suite.class)
@Suite.SuiteClasses({})
public class SQLServerTestSuite {
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
// clean database
}
}
Следует ли выделять одну базу данных для всех запущенных тестов, но без фиксации?
Рекомендуется выполнять команды SQL , но с командой отката , поскольку при использовании фиксации вы можетеизменить состояние текущего теста, а также изменить состояние других тестов.В противном случае вы можете столкнуться с неожиданным поведением.
Для каждого разработчика рекомендуется песочница базы данных .Это позволяет каждому пользователю изменять базу данных любым удобным для него способом и использовать приложение с тестами , не беспокоясь о каких-либо взаимодействиях между его тестами и тестами других пользователей
Как люди справляются с настройкой и разбором?
public class PersonTest {
@Before
public void setUp() {
// set up state to run the test
}
@After
public void teardown() {
// Transaction rollback
}
}
Приятная вещь в Шаблон отката транзакции в том, что оставляет базу данных точно в том же состоянии, что и примы начали тест независимо от того, какие изменения мы внесли в содержимое базы данных
Является ли DBUnit все еще популярным?
DBUnit используется для сравнения таблиц базы данныхпротив файла XML, который содержит ожидаемые значения.Следует помнить, что DBUnit имеет дело с настройками, закодированными вручную.Однако, хотя этот подход более тщательный , крайне сложно разработать и поддерживать такие тесты .Кроме того, тесты не обнаруживают отсутствующее сопоставление для вновь добавленного поля или свойства.
Как может помочь Spring?
Spring имеет встроенную поддержку транзакциишаблон отката и поддерживает именованный параметр ( SqlParameterSource ), который позволяет вам выводить простые запросы jdbc в многострочном и читаемом xml-файле для каждой базы данных поставщиков, например
<?xml version="1.0" encoding="UTF-8"?>
<queries>
<query name="PERSON_BY_ID">
<![CDATA[
select
*
from
PERSON
where
PERSON.ID = :integerId
]]>
</query>
</queries>
Обратите внимание на параметр запроса,Это следует стилю кода JavaScript, где вы объявляете тип параметра в качестве префикса.Теперь вы можете создать класс, в котором вы определяете набор именованных запросов
public class SQLServerQuery {
public static final String PERSON_BY_ID = "PERSON_BY_ID";
}
Для динамических запросов обычно важно обнаруживать ошибки в логике запроса, такие как использование <вместо <= </em>.Чтобы выявить ошибки такого рода, нам нужно написать тесты, которые заполняют базу данных тестовыми данными, выполняют запрос и проверяют, возвращает ли он ожидаемые объекты.К сожалению, тесты такого типа требуют много времени как для написания, так и для выполнения.