使用mockito模拟对象时获取空指针异常

时间:2015-02-02 12:45:37

标签: soap junit gradle mockito spring-integration

我正在使用spring boot,spring integration,gradle项目。我正在使用junit和Mockito嘲笑我的肥皂服务。基本上我的应用程序有这三个类。 Junit Class用于模拟肥皂服务。

 @Before
public void setup() {
    gw=Mockito.mock(ProjectGateway.class);
    pc=new ProjectController();
    pc.setGateWay(gw);
}

@Test
public void testGetProject() throws Exception {
    GetAuthorizedWebSendTransferProjects mockRequest=new GetAuthorizedWebSendTransferProjects();
    GetAuthorizedWebSendTransferProjectsResponse mockResponse=getMockResponse();
    when(gw.getResponse(mockRequest)).thenReturn(mockResponse);
    List<Project> projects=pc.getProject();
    assertEquals(1,projects.size());
}`

和一个调用soap服务的接口。

`public interface ProjectGateway {

public GetAuthorizedWebSendTransferProjectsResponse getResponse(
        GetAuthorizedWebSendTransferProjects request);

}“

以及我需要进行单元测试的方法。

 @RequestMapping(value = "/projects", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody List<Project> getProject() {
    GetAuthorizedWebSendTransferProjects request = new GetAuthorizedWebSendTransferProjects();
    GetAuthorizedWebSendTransferProjectsResponse response = gw
            .getResponse(request);
    JAXBElement<ArrayOfProjectContainer> arr = response
            .getGetAuthorizedWebSendTransferProjectsResult();
    ArrayOfProjectContainer arr1 = arr.getValue();
    List<ProjectContainer> arr2 = arr1.getProjectContainer();
    List<Project> projects = getPopulatedProjectList(arr2);
    return projects;
}

但是我在“List projects = pc.getProject();”中得到了nullpointerexception。测试方法任何人都可以在这个问题上帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:2)

问题是模拟所期望的request实例与实际传递的实例不匹配。因此条件不匹配,模拟返回null

使用

 when(mock.getResponse(
      Mockito.isA(GetAuthorizedWebSendTransferProjects.class)))
      .thenReturn(...)