2017-06-24 42 views
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 
    } 
} 
從上方

所以,

  1. 一種用於服務方法直接

  2. 測試測試由嘲笑服務方法

哪一個正確的方式測試控制器方法寫單元測試?

回答

0

對於兩個不同的組件,這些是兩個不同的單元測試,所以沒有比另一個更好的單元測試。