簡體   English   中英

模擬Java春季測試-NullPointerException

[英]Mocking Java Spring Test - NullPointerException

我是使用模擬進行測試的新手,正在嘗試在控制器上測試方法,但是卻收到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" +
                    "}"));
}

}

如果取消對doNothing行的注釋,則會出現錯誤,例如T Stubbed之類的內容無法應用於void。

我不確定如何模擬我的服務,但是出現此錯誤:

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

知道我哪里可能出錯嗎?

首先,不要急於聲明要在測試類中進行測試的控制器,並在@Before方法中調用它:

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

第二,為防止模擬markService方法調用時出錯,您需要使用以下代碼:

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

代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM