0
上下文:Spring Boot,REST風格的Web服務。單元測試是測試嘲笑服務方法還是直接測試服務方法的控制器方法?
我寫的調查項目中的Web服務,
@RestController
public class SurveyEndpoint {
@Autowired
private SurveyService surveyService;
@RequestMapping(value="surveys/{surveyId}/questions/{questionId}", method=RequestMethod.GET)
public QuestionEntity getQuestions(@PathVariable String surveyId, @PathVariable String questionId){
return surveyService.retrieveQuestionById(surveyId, questionId);
}
下面是組件類:
@Component
public class SurveyService {
public QuestionEntity retrieveQuestionById(String surveyId, String questionId) {
//Code for retrieving question
}
我寫了一個單元測試,該測試直接組件的方法如下:
public class SurveyServiceTest {
@Autowired
SurveyService surveyService;
@Test
public void testRetrieveQuestionById() {
QuestionEntity questions = surveyService.retrieveQuestionById("Survey1", "Question1");
assertEquals("Question1", questions.getQuestionId());
}
其他方式是直接測試控制器方法,如下:
@Test
public void testRetrieveQuestionById() throws Exception {
QuestionEntity mockQuestion = new QuestionEntity("Question1",
"Largest Country in the World", "Russia", Arrays.asList(
"India", "Russia", "United States", "China"));
Mockito.when(
surveyService.retrieveQuestionById(Mockito.anyString(), Mockito.anyString())).thenReturn(mockQuestion);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/surveys/Survey1/questions/Question1").accept(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
String expected = "{id:Question1,description:Largest Country in the World,correctAnswer:Russia}";
JSONAssert.assertEquals(expected, result.getResponse()
.getContentAsString(), false);
// Assert
}
}
從上方
所以,
一種用於服務方法直接
測試測試由嘲笑服務方法
哪一個正確的方式測試控制器方法寫單元測試?