mockito - 我无法使用 mockito 替换 SpringBatch 中的方法调用
问题描述
我正在尝试使用 mockito 替换 SpringBatch 中的方法调用。代码大大简化并删除了不必要的减少它,如果缺少什么,写,我会补充。
Spring批处理设置文件
@Configuration
@EnableBatchProcessing
public class ListBatchConfig {
@Bean
public Job jobListBath(JobBuilderFactory jobBuilderFactory,
StepBuilderFactory stepBuilderFactory,
ItemReader<Student> itemReaderListBath,
ItemProcessor<Student, Marksheet> processorListBath,
ItemWriter<Marksheet> itemWriterListBath
) {
Step step = stepBuilderFactory.get("List-load")
.<Student, Marksheet>chunk(3)
.reader(itemReaderListBath)
.processor(processorListBath)
.writer(itemWriterListBath)
.build();
return jobBuilderFactory.get("L-Load")
.incrementer(new RunIdIncrementer())
.start(step)
.build();
}
@Bean
public ItemReader<Emaill> itemReaderListBath() {
return new ListItemReader();
}
...
ItemReader 在一个单独的类 List Item Reader 中描述
@Component
@Slf4j
public class ListItemReader implements ItemReader<Student> {
@Autowired
private CalService calService ;
DataAtributes dataAtributes;
...
@Override
public Student read() {
//Тут вызывается метод сервиса, который необходимо подменить
dataAtributes = new DataAtributes(1,"test");
Integer val = calService.addAttr(dataAtributes);
...
}
这是服务本身
@Service
public class CalService {
public int addI(int input1) {
return 0;
}
public Integer addAttr(DataAtributes attr) {
return 0;
}
}
在此服务中,作业开始
@Service
public class StartJob {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job jobDeveloper;
public void launchJob() throws Exception {
...
JobExecution jobExecution = jobLauncher.run(jobDeveloper, params);
和测试类本身
@SpringBootTest
public class CaclServisTest {
@Mock
CalService calcService;
@InjectMocks
StartJob
@Autowired
StartJob startJob;
@Test
void add() {
DataAtributes dataAtributes = new DataAtributes(1,"test");
when(calcService.addAttr(dataAtributes)).thenReturn(57);
startJob.launchJob();
}
}
结果,调用的是本机方法,而不是替代方法。我不明白应该安装什么服务@InjectMocks
解决方案
您的@Mock
字段在 Spring 上下文中不可用。特别是:从 Spring 上下文中@Autowire StartJob startJob
使用CalService
,而不是你的模拟。
要在 Spring 上下文中替换 bean,请@MockBean
改用:
@SpringBootTest
public class CaclServisTest {
@MockBean
CalService calcService;
@Autowired
StartJob startJob;
@Test
void add() {
DataAtributes dataAtributes = new DataAtributes(1,"test");
when(calcService.addAttr(dataAtributes)).thenReturn(57);
startJob.launchJob();
}
}
推荐阅读
- javascript - 如何使用 XSS 保护在单个主机名上安全地托管多个“站点”
- powershell - 将 powershell 输出和错误重定向到控制台(实时)和变量
- java - server.servletPath=/* 在 spring-boot.version 2.1.7.RELEASE 中不起作用
- java - 用什么代替 ArrayList 来分组数据?
- javascript - Gatsby 代码框:TypeError:无法读取未定义的属性“src”
- tensorflow2.0 - AttributeError:模块“张量流”没有属性“版本”
- sql-server - 将 SQL 结果写入 xlsx 的 Powershell 脚本 - 即使查询返回记录,Excel 工作表也是空白的
- docker - Docker - 守护进程上下文未指向本地目录
- javascript - “无服务器离线:找不到路由。” 在离线模式下运行 AWS Lambda 函数
- django - Webpack 使用文件夹名称而不是 Url 作为公共路径