模拟Java Spring测试-NullPointerException

模拟Java Spring测试-NullPointerException,java,mocking,Java,Mocking,我不熟悉使用mock进行测试,我正在尝试在控制器上测试一个方法,但是我得到了NullPointerException。以下是我的控制器方法: //CREATE MARK @RequestMapping(value = "/marks", method = RequestMethod.POST) public void createMark(@RequestBody MarkDTO markDTO) { markService.createMark(markDTO); } 这是我

我不熟悉使用mock进行测试,我正在尝试在控制器上测试一个方法,但是我得到了NullPointerException。以下是我的控制器方法:

    //CREATE MARK
@RequestMapping(value = "/marks", method = RequestMethod.POST)
public void createMark(@RequestBody MarkDTO markDTO) {
    markService.createMark(markDTO);
}
这是我的服务:

public interface MarkService {

Page<MarkDTO> getMarks(Pageable pageable);
MarkDTO getMark(Integer id);

void createMark(MarkDTO markDTO);
void updateMark(Integer id, Mark mark);
void deleteMark(Integer id);
}

如果我取消注释doNothing行,我会得到一个错误,类似于T Stubbed的东西不能应用于void

我不知道如何模拟我的服务,但我得到了以下错误:

位于的java.lang.NullPointerException com.fiivirtualcatalog.modules.homotation.controllers.MarkControllerTest.createMark(MarkControllerTest.java:66)


知道我可能出了什么问题吗?

首先,不要忘记声明您要在测试类中测试的控制器,并在@Before方法中调用它:

 MockitoAnnotations.initMocks(this);
 this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
第二,为了防止模拟markService方法调用的错误,您需要使用以下代码:

doNothing().when(markService).createMark(markDTO);
doNothing().when(markService.createMark(markDTO));
而不是:


首先,不要忘记在测试类中声明要测试的控制器,并在@Before方法中调用它:

 MockitoAnnotations.initMocks(this);
 this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
第二,为了防止模拟markService方法调用的错误,您需要使用以下代码:

doNothing().when(markService).createMark(markDTO);
doNothing().when(markService.createMark(markDTO));
而不是: