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中模拟接口类的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 单元测试利器——Mockito

Mockito mockStatic 无法解析符号

在 Spring Boot 中的 mockito 测试中的 if...else 语句问题

重学SpringBoot系列之Mockito测试

Mockito - 模拟 ApplicationContext

MockEJB - JUnit Mockito - 无法在第二个单元测试中重新绑定模拟 EJB