2016-03-22 8 views
0

Dies ist die mule flow, die ich auf die Tests verwenden:Mule - JUnit senden Anfragen - Best Practice

HTTP Listener > Logger (Message) > HTTP Request POST > Logger (Response) 

In meinem mule Projekt Ich habe 5 classes. Dies ist ein Beispiel:

@XmlRootElement 
public class Car { 

    String name; 
    String color; 

    public Car() { 
     super(); 
    } 

    public Car(String name, String color) { 
     super(); 
     this.name = name; 
     this.color = color; 
    } 

    public String getName() { 
     return name; 
    } 
    @XmlElement 
    public void setName(String name) { 
     this.name = name; 
    } 
[More Setters and Getters...] 
} 

ich das Element @XmlRootElement-class und @XmlElement zu setters asign.

Dann habe ich eine Hauptklasse, wenn ich den Fluss mit Config Ressourcen testen:

public class JUnitSend extends FunctionalTestCase { 

    @Override 
    protected String getConfigResources() { 
     return "send-xml.xml"; 
    }  

    public String getName() { 
     return "Mule Server Test"; 
    } 

    public Car myCar() 
    {  
     Car myCar = new Car(); 
     myCar.setName("Ferrari"); 
     myCar.setColor("Red"); 

     return myCar; 
    } 

    @Test 
    public void sendXML() throws Exception { 

     JAXBContext jaxbContext = JAXBContext.newInstance(Car.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
     StringWriter sw = new StringWriter(); 

     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     jaxbMarshaller.marshal(myCar(), sw); 
     String xmlString = sw.toString(); 

     MuleClient client = new MuleClient(muleContext); 

     MuleMessage result = client.send("http://localhost:8090/", xmlString, null); 

     assertEquals("Hello", result.getPayloadAsString()); 
    } 
} 

Aber ich will es testen mit den verbleibenden vier Klassen.

Was ist die Best Practices mit den anderen Klassen zu testen?

+1

Nur ein unabhängiger Kommentar: als Best Practice, sollten Sie die MuleClient nehmen aus dem MuleContext anstatt eigene zu erstellen. Das ist '' 'muleContext.getClient()' ''. – afelisatti

Antwort

1

Wie wäre es etwa so:

public class JUnitSend extends FunctionalTestCase { 

    @Override 
    protected String getConfigResources() { 
     return "send-xml.xml"; 
    }  

    public String getName() { 
     return "Mule Server Test"; 
    } 

    public Car myCar() 
    {  
     Car myCar = new Car(); 
     myCar.setName("Ferrari"); 
     myCar.setColor("Red"); 

     return myCar; 
    } 

private String marshallObject(Object object) 
{ 
    JAXBContext jaxbContext = JAXBContext.newInstance(Car.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
     StringWriter sw = new StringWriter(); 

     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     jaxbMarshaller.marshal(object, sw); 
     return sw.toString(); 
} 

    @Test 
    public void testSendXml_car() throws Exception {   

     MuleClient client = new MuleClient(muleContext); 

     MuleMessage result = client.send("http://localhost:8090/", marshallObject(myCar(), null); 

     assertEquals("Hello", result.getPayloadAsString()); 
    } 

@Test 
    public void testSendXml_otherObject() throws Exception {   

     MuleClient client = new MuleClient(muleContext); 

     MuleMessage result = client.send("http://localhost:8090/", marshallObject(myOtherObject(), null); 

     assertEquals("Hello", result.getPayloadAsString()); 
    } 



} 

Und ja immer MuleClient von context ist etwas effizienter:

MuleClient client = muleContext.getClient(); 
+0

Danke! Das ist eine nette Lösung, aber wenn ich 'client.send' mit' muleContext.getClient() 'verwende, gibt es einen Fehler zurück.' Die Methode send (String, MuleMessage) im Typ MuleClient ist nicht anwendbar für die Argumente (String, String) 'Wie kann ich eine MuleMessage mit der Zeichenfolge erstellen? – gtx911

+0

'send (String URL, Objektnutzlast, Map messageProperties)' übergeben Sie das dritte Argument als null –

+0

Es ist ** deprecated **, die eindeutige Methode, die ich verwenden kann, ist: 'send (String URL, MuleMessage Nachricht) ' – gtx911