我是使用模拟进行测试的新手,我正在尝试在 Controller 上测试方法,但是我得到了 NullPointerException。这是我的 Controller 方法:
//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);
}
这是我的测试:
public class MarkControllerTest {
@Autowired
private WebApplicationContext ctx;
@Mock
private MarkService markService;
private MockMvc mockMvc;
@Before
public void setup(){
}
@Test
public void createMark() throws Exception {
//doNothing().when(markService.createMark(markDTO));
mockMvc.perform(post("/marks")
.contentType(MediaType.APPLICATION_JSON)
.content("{\n" +
" \"id\": 1,\n" +
" \"id_profesor\": 2,\n" +
" \"valoare\": 10,\n" +
" \"data_notare\": \"2017-05-29\"\n" +
"}"));
}
}
如果我取消注释 doNothing 行,则会收到错误,诸如 T Stubbed 之类的内容无法应用于 void。
我不知道如何模拟我的服务,但是我收到此错误:
java.lang.NullPointerException at com.fiivirtualcatalog.modules.homework.controllers.MarkControllerTest.createMark(MarkControllerTest.java:66)
知道我哪里可能会出错吗?
最佳答案
首先,不要忘记声明您想要在测试类中测试的 Controller ,并在 @Before 方法中调用它:
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
第二个,为了防止模拟 markService 方法调用错误,您需要使用以下代码:
doNothing().when(markService).createMark(markDTO);
而不是:
doNothing().when(markService.createMark(markDTO));
关于java - 模拟 Java Spring 测试 - NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271139/