Wie zu verwenden Mockito testen von SOAP-Nachrichten?

Ich bin Recht neu auf Mockito, und dachte, ich würde versuchen, es zu testen, eine SOAP-Handler. Dies ist jedoch entpuppt sich ein viel schmerzhafter als ich es mir erwartet/gewünscht.

Ich bin auf der Suche um zu überprüfen, dass meine hf ist in der Lage, extrahieren Sie die Nachrichten-id im header einer SOAPMessage. Aber von dem handler, der einzige Weg, um die Kopfzeile ist über das Kontext - /Meldung/Artikel/envelope/header. Mit Mockito meine Lösung war, zu verspotten, meine SOAPMessage, bedeutete die Schaffung jedes einzelne Objekt, und die Methode stubbing.

Ich kann mir nur vorstellen, dass es eine einfachere/bessere Möglichkeit, dies zu erreichen:

@RunWith(MockitoJUnitRunner.class)
public class UUIDHandlerTest {

    @Mock private SOAPMessage message;
    @Mock private SOAPEnvelope envelope;
    @Mock private SOAPHeader header;
    @Mock private SOAPPart part;

    @Mock
    private SOAPMessageContext context;

    @Before
    public void setup() throws SOAPException{
        when( context.getMessage()).thenReturn(message);
        when( message.getSOAPPart()).thenReturn(part);
        when( part.getEnvelope()).thenReturn(envelope);
        when( envelope.getHeader()).thenReturn(header);
    }


    @Test
    public void testHandleInboundMessage() {
        when( context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY)).thenReturn(false);

        when(header.getElementsByTagName(anyString())).thenAnswer(new Answer<NodeList>() {
            /* (non-Javadoc)
             * @see org.mockito.stubbing.Answer#answer(org.mockito.invocation.InvocationOnMock)
             */
            @Override
            public NodeList answer(InvocationOnMock invocation) throws Throwable {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new ByteArrayInputStream(new String("<wsa:MessageID>messageId</wsa:MessageID>").getBytes()));

                //TODO Auto-generated method stub
                return doc.getElementsByTagName("wsa:MessageID");
            }

        });


        //call the test class
        new UUIDHandler().handleMessage(context);

        //check the MDC value
        assertEquals("messageId", MDC.get(LoggerConstants.DC_PROPERTY_MESSAGE_ID));
    }
}

Wie gesagt, es funktioniert, aber es sieht aus wie eine sehr hässliche/Dicke Gewicht Lösung.

Gibt es trotzdem, dies zu tun einfacher/sauberer?

Dank!

Eric

InformationsquelleAutor Eric B. | 2012-02-15
Schreibe einen Kommentar