2017-05-30 37 views
0

我是新来测试与嘲笑,我想测试控制器上的方法,但是我得到NullPointerException。这里是我的控制器方法:嘲笑Java春季测试 - 空指针异常

//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)

任何想法,我migh T为回事?

回答

2

首先,不要foget申报你whant测试类的内部测试控制器,并称之为您的@Before方法内:

MockitoAnnotations.initMocks(this); 
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); 

而第二个,以防止嘲讽markService方法的错误叫你需要使用以下代码:

doNothing().when(markService).createMark(markDTO); 

代替:

doNothing().when(markService.createMark(markDTO));