Mockito无法在SpringBoot中模拟接口类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mockito无法在SpringBoot中模拟接口类相关的知识,希望对你有一定的参考价值。
我正在尝试使用具有service
接口和interface
impl类的控制器类来测试一个测试用例。但是,它总是失败并返回null
指针异常或未找到自定义exception
,甚至嘲笑该方法以返回模拟值。
Controller.class
public class RestAPIController {
@Autowired
RestAPIService restAPIService;
@PostMapping(path = "list/{id}")
public ResponseEntity<List<Employee>> findByID(@PathVariable(value = "id") String id)
throws RestAPIException {
List<Employee> list = restAPIService.findByID(id);
if (list == null || list.isEmpty()) {
throw new IDNotFoundException(id);
}
return new ResponseEntity<>(list, HttpStatus.OK);
}
服务接口:
@Service
public interface RestAPIService {
public List<Employee> findByID(@Param("id") String id) throws RestAPIException;
}
服务展示类别:
@Service
public class RestAPIServiceImpl implements RestAPIService {
@Override
public List<Employee> findByID(String id) throws RestAPIException {
return serviceUtils.transformationObj(repository.findByID(id));
}
}
测试类
@Mock
RestAPIService restAPIServiceImpl;
@InjectMocks
RestAPIController restAPIController;
@Test
public void testListByIDController() throws RestAPIException {
Mockito.when(restAPIServiceImpl.findByID("1")).thenReturn(baseDTOData());
ResponseEntity<List<Employee>> expectedList = restAPIController.findByID("1");
assertEquals(1, expectedList.getBody().size());
}
private List<Employee> baseDTOData() {
List<Employee> list = new ArrayList<>();
Employee e = new Employee();
e.setId("2");
list.add(e);
return list;
}
上面的代码失败,并输入IDNotFoundException,但模拟返回不起作用。
在测试用例中,以下行也未执行:
ResponseEntity<List<Employee>> expectedList = restAPIController.findByID("1");
assertEquals(1, expectedList.getBody().size());
任何人都可以提供帮助。
答案
[尝试一下:从界面@Service
中删除RestAPIService
批注,并将@Controller
批注添加到RestAPIController
。
以上是关于Mockito无法在SpringBoot中模拟接口类的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 中的 mockito 测试中的 if...else 语句问题