2016-05-19 19 views
5

Uygulamayı test etmek için Junki ile Mockito kullanıyorum, alay ederken HttpServletRequest'e başlık eklemem gerekiyor. Bu uygulamayı test etmek için ilk kez sahte konsept kullanıyorum. Bu sahte kavramı kullanırken üstbilgileri nesne istemek için nasıl ayarlayabiliriz?HttpServletRequest Başlıklarla Nasıl Alay Edilir?

Java Kod: Aşağıdaki snippet'iyle başlayabilir anapara için bir başlangıç ​​noktası ve gösteri gibi

public class DvrRestServiceTest { 

    static DvrMiddleService dms; 
    static HttpServletRequest request; 
    static Session session; 
    static DvrRestService drs; 
    public static final String DeviceId = "000004D42070"; 
    @BeforeClass 
    public static void init(){ 
     dms = mock(DvrMiddleService.class); 
     request = mock(HttpServletRequest.class); 
     session = mock(Session.class); 
     drs = new DvrRestService(dms); 
    } 
    @Test 
    public void getDeviceMetadataTest(){ 
     Response rs = drs.getDeviceMetadata(request, DeviceId, session); 
     assertEquals(Response.Status.OK, rs.getStatus()); 
    } 
} 
+0

Onun belgelenmiş harika, sadece bir göz u sadece Mockito.when istediğini (request.getHeaderNames()). ThenReturn (... gibi bir şey yazmaya gerek çıktı. ..) –

cevap

9

:

@Produces({ MediaType.APPLICATION_JSON }) 
@Path("/devices") 
public class DvrRestService { 
    private static final Logger logger = LoggerFactory.getLogger(DvrRestService.class); 

    private DvrMiddleService dvrMiddleService; 

    @Inject 
    public DvrRestService(DvrMiddleService dvrMiddleService) { 
     this.dvrMiddleService = dvrMiddleService; 
    } 

    @GET 
    @Path("/{deviceId}/metadata") 
    public Response getDeviceMetadata(@Context HttpServletRequest request, @PathParam("deviceId") String deviceId, 
     @RequiredSession final Session session) { 

     try { 
      public static String[] REQUEST_HEADERS = { "if-none-match" }; 
      List<String> requiredHeaders = Lists.newArrayList(REQUEST_HEADERS); 
      Map<String, String> headers = new HashMap<String, String>(); 

      Enumeration<String> headerNames = request.getHeaderNames(); 
      while (headerNames.hasMoreElements()) { // here gettting NullPointerException 

       String headerName = headerNames.nextElement(); 
       if (requiredHeaders.contains(headerName.toLowerCase())) { 
        String value = request.getHeader(headerName); 
        if (value != null) { 
         headers.put(headerName, value); 
         System.out.println("headerName: " + headerName + ", Value: " + value); 
        } 
       } 
      } 
      DvrResponse response = dvrMiddleService.getDeviceMetadata(deviceId.toUpperCase(), getHeaders(request)); 
      return processResponse(response.statusCode, response.getResponse(), DeviceMetadataResponse.class, 
       response.getHeaders()); 
     } catch (Exception e) { 
      return processErrorResponse(e, new DeviceMetadataResponse(), logger); 
     } 

    } 
} 

İşte benim Testi Kodu olduğunu.

// define the headers you want to be returned 
Map<String, String> headers = new HashMap<>(); 
headers.put(null, "HTTP/1.1 200 OK"); 
headers.put("Content-Type", "text/html"); 

// create an Enumeration over the header keys 
Iterator<String> iterator = headers.keySet().iterator(); 
Enumeration headerNames = new Enumeration<String>() { 
    @Override 
    public boolean hasMoreElements() { 
     return iterator.hasNext(); 
    } 

    @Override 
    public String nextElement() { 
     return iterator.next(); 
    } 
}; 

// mock HttpServletRequest 
HttpServletRequest request = mock(HttpServletRequest.class); 
// mock the returned value of request.getHeaderNames() 
when(request.getHeaderNames()).thenReturn(headerNames); 

System.out.println("demonstrate output of request.getHeaderNames()"); 
while (headerNames.hasMoreElements()) { 
    System.out.println("header name: " + headerNames.nextElement()); 
} 

// mock the returned value of request.getHeader(String name) 
doAnswer(new Answer<String>() { 
    @Override 
    public String answer(InvocationOnMock invocation) throws Throwable { 
     Object[] args = invocation.getArguments(); 
     return headers.get((String) args[0]); 
    } 
}).when(request).getHeader("Content-Type"); 

System.out.println("demonstrate output of request.getHeader(String name)"); 
String headerName = "Content-Type"; 
System.out.printf("header name: [%s] value: [%s]%n", 
     headerName, request.getHeader(headerName)); 
} 

demonstrate output of request.getHeaderNames() 
header name: null 
header name: Content-Type 

demonstrate output of request.getHeader(String name) 
header name: [Content-Type] value: [text/html] 
+0

Teşekkürler, çalıştığı – Sat

+0

@Sathish Sorununuzu çözerse lütfen cevabı kabul edin. – SubOptimal

+1

java.util.Collections # numaralandırma için bir çağrı ile numaralandırma oluşturmak için daha kısa değildi miydi? – 473183469

İlgili konular