Как я могу выполнить сначала @After void after() из junit, а затем @ExpectedDatabase из db-unit?
Я хочу протестировать представление базы данных и использую db-unit для вставки данных в таблицы, которые используются проверенным представлением, а представление ожидаемых значений выполняется db-unit, но в этом представлении используются некоторые данные из другого представления, над которым я хочу поиграть Я сделал несколько сценариев, которые заменяют представление на фиктивные данные, после завершения метода теста, фиктивное представление заменяется на исходное представление.
Но я нахожу проблему, @ExpectedDatabase
вызывается после @After void after()
метод, и тест не пройден.
Как я могу выполнить сначала @After void after()
из джунит, а затем @ExpectedDatabase
из дб-единицы?
Вот мой код:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfigTest.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener. DirtiesContextTestExecutionListener.class })
public class ClassTest {
private static final String MOCK_REOURCE_PATH = "classpath:sql/mock_view.sql";
private static final String ORIGINAL_REOURCE_PATH = "classpath:sql/original_view.sql";
@Autowired
private ApplicationContext applicationContext;
@Before
public void init() {
ScriptUtils.executeSqlScript((DataSource) applicationContext.getBean("dataSource").getConnection(), applicationContext.getReource(MOCK_REOURCE_PATH ));
}
@Test
@DatabaseSetup("classpath:sample-data.xml")
@ExpectedDatabase(assertionMode = NON_STRICT, value = "classpath:expected-data.xml")
public void testView() {
}
@After
public void after() {
ScriptUtils.executeSqlScript((DataSource) applicationContext.getBean("dataSource").getConnection(), applicationContext.getReource(ORIGINAL_REOURCE_PATH ));
}
}
1 ответ
Ваша декларация для @TestExecutionListeners
сломан: он не компилируется "как есть".
Убедитесь, что вы зарегистрировали TransactionalTestExecutionListener
и DbUnitTestExecutionListener
с помощью @TestExecutionListeners
и аннотируйте свой тестовый класс с помощью Spring @Transactional
аннотация, похожая на следующую...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfigTest.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class })
@Transactional
public class ClassTest { /* ... */ }