2016-08-02 4 views
0

Я пишу JUnit для метода, который unmarshalling Object. Он бросает IllegalArgumentException, пока не сортирует объект. Я не могу опубликовать весь метод.Mocking Unmarshaller

Метод тестируемой

public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { 
    MultivaluedMap<String, String> headers = responseContext.getHeaders(); 
    String contentType = headers.getFirst(CONTENT_TYPE_HEADER); 

    if(contentType != null && contentType.startsWith(TEXT_XML)) { 
     if(200 == responseContext.getStatus()) { 
      if(requestContext.getUri().toString().contains("Policy/Retrieve")) { 
       try { 
        GetPolicyResponse p = (GetPolicyResponse)EISClientJAXBContextFactory.getUnmarshaller(GetPolicyResponse.class).unmarshal(responseContext.getEntityStream()); 

} 

При отладке я обнаружил, что is равна нулю, но я передаю inputStream

public final Object unmarshal(java.io.InputStream is) 
    throws JAXBException { 

    if(is == null) { 
     throw new IllegalArgumentException(
      Messages.format(Messages.MUST_NOT_BE_NULL, "is")); 
    } 

    InputSource isrc = new InputSource(is); 
    return unmarshal(isrc); 
} 

JUnit

@Test 
public void testPersonalAutoDriver() throws Exception { 
ClientRequestContext requestContext = mock(ClientRequestContext.class); 
    ClientResponseContext responseContext = mock(ClientResponseContext.class); 
    MultivaluedMap<String, String> headers = mock(MultivaluedMap.class); 
    URI uri = new URI("Policy/Retrieve"); 
    Unmarshaller unmarshaller = mock(Unmarshaller.class); 

    when(responseContext.getHeaders()).thenReturn(headers); 
    when(headers.getFirst(Mockito.eq("Content-Type"))).thenReturn("text/xml"); 
    when(responseContext.getStatus()).thenReturn(200); 
    when(requestContext.getUri()).thenReturn(uri); 

    JAXBContext context = JAXBContext.newInstance(GetPolicyResponse.class); 
    Marshaller marshaller = context.createMarshaller(); 

    Policy policy = new Policy(); 
    policy.setPolicyType(PolicyTypeEnum.PERSONAL_AUTO); 

    GetPolicyResponse policyResponse = new GetPolicyResponse(); 
    policyResponse.setPolicy(policy); 

    StringWriter writer = new StringWriter(); 
    marshaller.marshal(policyResponse, writer); 
    System.out.println("**** Object Marshalled Successfully ****"); 

    InputStream inputStream = new ByteArrayInputStream(writer.toString().getBytes()); 
    when(unmarshaller.unmarshal(inputStream)).thenReturn(policyResponse); 

// EISClientJAXBContextFactory.getUnmarshaller(GetPolicyResponse.class); 
// Unmarshaller unmarshaller = context.createUnmarshaller(); 
// GetPolicyResponse policyResponse2 = (GetPolicyResponse) unmarshaller.unmarshal(inputStream); 

// assertNotNull(policyResponse2); 

    filter.filter(requestContext, responseContext); 
    System.out.println("**** Object Unmarshalled Successfully ****"); 
} 
+0

Я также упомянул, что передаю аргумент, но все же он дает мне ту же ошибку. – Jaykumar

+0

Если бы я знал, что я прохожу, то зачем мне задавать этот вопрос. Я знаю, что NULL выбрасывает NPE, но здесь я не могу определить. Если вы определили проблему, дайте мне знать. – Jaykumar

+0

Когда он достигает метода unmarshall. показывает null. – Jaykumar

ответ

0

EISClientJAXBContextFactory.getUnmarshaller(GetPolicyResponse.class) статический метод. Вы не можете издеваться над статическими методами, используя Mockito.