我正在尝试弹簧批量测试代码。
我使用StepScopeTestExecutionListener自动装配按步骤确定范围的bean。
(当然,我将此侦听器用作TestExecutionListeners注释。)
豆子注入豆子后很好。
<bean id="itemReader" scope="step" class="org.springframework.batch.item.file.FlatFileItemReader">
...
</bean>
♪
@Autowired
@Qualifier(value="itemReader")
ItemReader<Item> reader;
但事实并非如此。发生NoSuchBeanDefinitionException并带有消息&#34;找不到类型为[org.springframework.batch.item.file.FlatFileItemReader]的限定bean用于依赖&#34;
@Autowired
@Qualifier(value="itemReader")
FlatFileItemReader<Item> reader;
显然,我认为这是步骤范围的问题。
但是,我并不了解ItemReader和FlatFileItemReader之间的区别。
或者,StepScopeTestExecutionListener中是否存在问题?
我应该用已实现的方法测试FlatFileItemReader,例如setResources()或open()......你知道我的意思。
请帮忙。
谢谢。答案 0 :(得分:3)
这是因为XML配置使用Java代理进行步骤范围的依赖。因此,生成的bean定义只能识别接口(在本例中为ItemReader
)。为了使其工作,您需要完全切换到java配置(当前java配置使用动态子类而不是Java代理)或配置步骤范围以便proxyTargetClass
设置为true(这使用动态子类化) )以便提供实施班级信息。
答案 1 :(得分:1)
以下为我工作
@Resource(name="itemReader")
ResourceAwareItemReaderItemStream<Item> itemReader
或
@Autowired
@Qualifier("itemReader")
ResourceAwareItemReaderItemStream<Item> itemReader
完成拍摄
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,
StepScopeTestExecutionListener.class })
@ContextConfiguration({"classpath:spring/jdbc/unit-test-context.xml"})
public class SomeTest {
@Resource(name="itemReader")
ResourceAwareItemReaderItemStream<Item> itemReader