Как я могу выполнить сначала @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 { /* ... */ }
Другие вопросы по тегам