Если вы не хотите загружать (и кэшировать) разные ApplicationContext
для каждого теста (см. ниже), ваш единственный вариант — определить поле static boolean
и установить его в методе @Before
, который заполняет базу данных, если это первый запуск в тесте. класс. Я полагаю, это то, что вы имели в виду, имея if
в методе @Before
.
Теперь, если вы хотите, чтобы для каждого тестового класса загружался другой ApplicationContext
, вы можете определить уникальный @Configuration
класс или файл конфигурации XML, который заполняет базу данных для данного тестового класса. Затем вы можете аннотировать свой тестовый класс, например:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/standard-test-config.xml", "TestClass1-config.xml" })
@DirtiesContext( classMode = ClassMode.AFTER_CLASS )
public class TestClass1 { / * ... */ }
or
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { StandardTestConfig.class, TestClass1.Config.class })
@DirtiesContext( classMode = ClassMode.AFTER_CLASS )
public class TestClass1 { / * ... */ }
Затем вы можете использовать <jdbc:embedded-database ...>
или <jdbc:initialize-database ...>
в XML или EmbeddedDatabaseBuilder
или ResourceDatabasePopulator
(с DatabasePopulatorUtils
) в классе @Configuration
.
Конечно, загрузка разных ApplicationContext
для каждого тестового класса может сильно замедлить работу набора тестов, особенно если загрузка ApplicationContext
занимает много времени. Так что вам нужно принять это во внимание.
С уважением,
Сэм
person
Sam Brannen
schedule
01.04.2014