2015-08-14 9 views
5

मैं जूनिट 4 के साथ पुन: बीमा का उपयोग कर रहा हूं। मेरी टेस्ट विधि में मैं मोंगोडब में एक ऑब्जेक्ट बनाता हूं और जब मैं परीक्षण चलाता हूं तो यह भी सफलतापूर्वक जारी रहता है। लेकिन मुझे बनाई गई आईडी को स्टोर करने की ज़रूरत है, इसलिए मैं प्रतिक्रिया निकाय प्राप्त करने का प्रयास करता हूं। लेकिन response.getBody().asString() खाली है।बाकी आश्वासन वाले पद के लिए खाली प्रतिक्रिया निकाय

@Test 
public void testA() throws JSONException { 

    Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>(); 
    createVideoAssignmentParm.put("test1", "123"); 

    Response response = expect().statusCode(201).when().given().contentType("application/json;charset=UTF-8") 
      .headers(createVideoAssignmentParm).body(assignment).post("videoAssignments"); 
    JSONObject jsonObject = new JSONObject(response.getBody().asString()); 
    id= (String)jsonObject.getString("assignmentId"); 
} 

जब मैं बाकी अंत बिंदु बाहर से आह्वान है, यह प्रतिक्रिया शरीर भी प्रासंगिक क्षेत्रों तो बाकी एपीआई के साथ कोई समस्या नहीं के साथ देता है।

यदि उपरोक्त प्रश्न के लिए कोई उत्तर नहीं है तो आप बाकी आश्वासन का उपयोग करके रिटर्न बॉडी के साथ एक पोस्ट का परीक्षण कैसे करेंगे ताकि मैं इस तरह से कोशिश कर सकूं।

मेरे नियंत्रक विधि लग रहा है, जैसे

@RequestMapping(value = "/videoAssignment", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE, method = RequestMethod.POST) 
@ResponseBody 
public HttpEntity<VideoAssignment> createVideoAssingnment(
    //@ApiParam are there..){ 

    //other methods 
    return new ResponseEntity<>(va, HttpStatus.CREATED); 
} 

उत्तर

4

हम RestAssured के साथ कॉल सेवाओं को कॉल करने के लिए एक अलग वाट का उपयोग करें। हालांकि, अगर आपको खाली स्ट्रिंग मिलती है तो आप डीबग कर सकते हैं कि आपकी सेवा को .peek() का उपयोग करके बुलाया गया था या नहीं। response.The निम्नलिखित cide टुकड़ा की सामग्री की जाँच करने के लिए आप मदद कर सकते हैं

@Test 
public void testStatus() 
{ 
    String response = 
      given() 
       .contentType("application/json") 
       .body(assignment) 
      .when() 
       .post("videoAssignments") 
       .peek() // Use peek() to print the ouput 
      .then() 
       .statusCode(201) // check http status code 
       .body("assignmentId", equalTo("584")) // whatever id you want 
      .extract() 
       .asString(); 

    assertNotNull(response); 
} 
+0

धन्यवाद। मैं इसका उपयोग करने की कोशिश करता हूँ। यदि मैं दूसरी बॉडी लाइन के साथ दौड़ता हूं तो यह कहता है, "प्रतिक्रिया में कोई सामग्री-प्रकार परिभाषित नहीं किया गया था"। तो फिर मैं सामग्री प्रकार को फिर से जोड़ता हूं .थ()। स्टेटसोड (201) .contentType ("application/json") .body ("असाइनमेंट आईडी", बराबर ("testid123")) लेकिन यह कहता है, एप्लिकेशन/जेसन "नहीं करता" टी वास्तविक सामग्री-प्रकार से मेल खाता है। कोई संकेत क्या कारण है? मेरे नियंत्रक में बाकी एपीआई जेसन के रूप में परिभाषित विशेषताओं का उत्पादन और उपभोग करता है। मैंने यह दिखाने के लिए अपना प्रश्न अपडेट किया है कि नियंत्रक एपीआई कैसा दिखता है। – Harshana

+0

अभी भी जब मैं देखता हूं(), मैं देख सकता हूं कि सामग्री शून्य है और सामग्री टाइप = "" – Harshana

+0

@ हरशाना मुझे संदेह है कि आपका नियंत्रक अच्छी तरह कॉन्फ़िगर नहीं है। गलत हेडर सेट होने पर यह जेसन के बजाय एक्सएमएल उत्पन्न कर सकता है, तो आपको शायद 'स्वीकार करें' सेट अप करने की आवश्यकता हो हेडर के रूप में हेडर भी। इसके अलावा, मैंने कक्षा के बिना निरंतर नाम का उपयोग किया है जिसका उपयोग आप स्पष्ट रूप से 'उत्पादन = मीडियाटाइप.एपीपीआईसीएशन_जेएसओएन_वीएमएल'' का उपयोग कर सकते हैं। इसके अतिरिक्त, RestAssured का उपयोग करने से पहले अपनी सेवा से कनेक्ट करने के लिए, सुनिश्चित करें कि आप पोस्टमैन जैसे किसी अन्य क्लाइंट के साथ अपने कंट्रोलर तक पहुंच सकते हैं, और एक बार जब आप इसकी पुष्टि कर लेंगे तो RestAssured पर जाएं –

1

यह जहां बाकी-बीमित चमकता है, अपने धाराप्रवाह इंटरफेस सही विधि का उपयोग करने पता लगाने के लिए बहुत उपयोगी है। आप वसंत बूट का उपयोग कर रहे हैं, तो परीक्षण को छोड़कर निर्भरता या विन्यास (जोड़े बिना काम करना चाहिए बाकी-आश्वासन दिया पाठ्यक्रम :)

उदाहरण नियंत्रक

@RestController 
@RequestMapping("/api") 
public class Endpoints { 

    public static class Assignment { 
     public int id = 1; 
     public String name = "Example assignment"; 
    } 

    @RequestMapping(value = "/example", 
      method = RequestMethod.POST, 
      produces = MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<Assignment> example(@RequestBody Assignment assignment) { 
     return ResponseEntity.created(URI.create("/example/1")) 
       .body(assignment); 
    } 
} 

और परीक्षण की,:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest("server.port:0") 
public class EndpointsTest { 

    @Autowired 
    private ObjectMapper objectMapper; 

    @Value("${local.server.port}") 
    private int port; 

    @Before 
    public void setUp() { 
     RestAssured.port = port; 
    } 

    @Test 
    public void exampleTest() throws Exception { 

     Endpoints.Assignment assignment = 
      given() 
      .contentType(ContentType.JSON) 
      .body(objectMapper.writeValueAsBytes(new Endpoints.Assignment())) 
     .when() 
      .post("/api/example") 
      .then().statusCode(HttpStatus.SC_CREATED) 
      .extract().response() 
      .as(Endpoints.Assignment.class); 

     // We can now save the assignment.id 
     assertEquals(1, assignment.id); 
    } 
} 
0

आप लॉग इन करने (कोशिश कर सकते हैं) सब() विधि:।

इस परीक्षा को उपयोग कर सकते हैं।

@Test 
public void test(){ 
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>(); 
createVideoAssignmentParm.put("test1", "123"); 
Response response=given() 
     .spec(request) 
     .contentType(ContentType.JSON) 
     .body(assignment) 
     .post("videoAssignments"); 

     response.then() 
     .statusCode(201).log().all(); 

     assignmentId=response.path("assignmentId"); 
    } 
संबंधित मुद्दे