Я пытаюсь написать независимый пример модульного теста для "шагового" объекта EJB Я опубликовал этот вопрос ранее и понимаю, что мне нужно использовать StepScopeTestExecutionListener
для создания шага для моего модульного теста; однако, я все еще получаю следующее исключение даже после использования StepScopeTestExecutionListener
:
Caused by: java.lang.IllegalStateException: No Scope registered for scope name 'step'
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:343)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
My JUnt
@TestExecutionListeners({ StepScopeTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
@PropertySource("classpath:properties/common.properties")
@ContextConfiguration(locations = { "/spring/common-context.xml" })
public class ConfigDAOImplTest {
@Autowired
private ConfigDAOImpl configDAO;
@Spy
private ContextParamDAO contextParamDAO = new ContextParamDAOImpl();
private static final String SCHEMA_CONFIG = "classpath:data/CONFIG_SCHEMA.sql";
private static final String DATA_CONFIG = "classpath:data/CONFIG_DATA.sql";
@Before
public void init() {
MockitoAnnotations.initMocks(this);
DataSource dataSource = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript(SCHEMA_CONFIG)
.addScript(DATA_CONFIG)
.build();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//override the jdbcTemplate for the test case
configDAO.setJdbcTemplate(jdbcTemplate);
configDAO.setContextParamDAO(contextParamDAO);
}
public StepExecution getStepExecution() {
JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
jobParametersBuilder.addString("test", "test");
JobParameters jobParameters = jobParametersBuilder.toJobParameters();
JobInstance jobInstance = new JobInstance(12345L,"testJob");
JobExecution jobExecution = new JobExecution(jobInstance,jobParameters);
StepExecution execution =
MetaDataInstanceFactory.createStepExecution(jobExecution,"step",11245L);
execution.getExecutionContext().putString("input.data", "foo,bar,spam");
return execution;
}
}
Я могу подтвердить, что getStepExecution
вызывается при запуске модульного теста в режиме отладки с точкой останова для этого метода.
Вопрос: Почему область действия шага все еще не инициализируется для моего JUnit?
Примечание: На несвязанной заметке причина, по которой я вручную создаю JobExecution
внутри getStepExecution
вместо использования MetaDataInstanceFactory.createJobExecution
, заключается в том, что по какой-то странной причине компилятор может найти createJobExecution
метод, но метод не найден во время выполнения. Я использовал флаг -verbose:class
и могу подтвердить, что существует только один jar, из которого загружается класс MetaDataInstanceFactory
, и что jar также содержит требуемый метод. Я предполагаю, что создание экземпляра JobExecution
вручную не должно быть причиной root моей проблемы.