2017-05-30 15 views
0

私はmockでテストするのが初めてで、コントローラでメソッドをテストしようとしていますが、NullPointerExceptionが発生します。ここに私のコントローラメソッドである:ここでは Mocking Java Spring Test - 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); 

}

そして、これは私のテストで:場合

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" + 
        "}")); 
} 

}

I doNothing行のコメントを解除すると、エラー、T Stubbedのような何かをvoidに適用することはできません。

java.lang.NullPointerException at com.fiivirtualcatalog.modules.homework.controllers.MarkControllerTest.createMark(MarkControllerTest.java:66)

私がトン間違って行くことmighすべてのアイデア:私は私のサービスを模擬する方法がわからないです

は、しかし、私はこのエラーを取得しますか?

答えて

2

まず、あなたがテストクラス内でテストするwhantコントローラを宣言するfoget、そしてあなたの@Beforeメソッド内でこれを呼び出すことはありません:

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

2つ目、あざけるmarkService方法の誤りを防ぐために必要な呼び出し

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

代わりに:

doNothing().when(markService.createMark(markDTO)); 
コードの下に使用します
関連する問題