Вставить тестовую запись для теста интеграции Spring Batch с @Transactional (распространение = NOT_SUPPORTED) не откатывается - PullRequest
0 голосов
/ 25 мая 2020

Я хотел бы вставить тестовую запись при тестировании своего задания Spring Batch.

Обычно я бы аннотировал тестовый класс с помощью @Transactional, но это не работает с тестовым классом, который помечен @ SpringBatchTest.

@SpringBatchTest
@SpringBootTest
@Transactional
public class JobTest {

    @Autowired
    private JobLauncherTestUtils jobLauncherTestUtils;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    void someTest() throws Exception {
        jdbcTemplate.update("insert into some_table (some_col1, some_col2) values ('foo', 'bar')");
        jobLauncherTestUtils.launchJob();
    }
}
Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
    at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:177)

Я тоже пробовал @Transactional(propagation = NOT_SUPPORTED), но запись не откатывается. Это было предложение в { ссылка }

Мне просто нужны тестовые записи для теста, поэтому я не был уверен, применим ли этот ответ ({ ссылка }) так как это только для теста.

1 Ответ

0 голосов
/ 26 мая 2020

Вам необходимо переместить настройку теста за пределы метода тестирования, например, в методе, помеченном @Before (JUnit 4) или @BeforeEach (JUnit 5). Что-то вроде:

@Before
public void initData() {
   jdbcTemplate.update("insert into some_table (some_col1, some_col2) values ('foo', 'bar')");
}

@Test
void someTest() throws Exception {
   jobLauncherTestUtils.launchJob();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...