2016-03-22 23 views
0

Bu benim testlere kullanmak mule flow geçerli: Benim katır projesinde yılındaKatır - JUnit Gönder istekleri - En iyi uygulama

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

Ben 5 classes var. I setters için class ve @XmlElement elemanının @XmlRootElement asign

@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...] 
} 

: Bu bir örnektir.

Sonra ben Yapılandırma Kaynakları ile akışını test ederken bir ana sınıf vardır:

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()); 
    } 
} 

Ama kalan 4 sınıfları ile test etmek istiyorum.

diğer sınıfları ile test etmek iyi uygulamalar nedir?

+1

Sadece ilgisiz bir açıklama: en iyi uygulama olarak, sen MuleClient alarak olmalıdır MuleContext kendi oluşturmak yerine. Bu 'muleContext.getClient()' '' dir. – afelisatti

cevap

1

Nasıl böyle bir şey hakkında:

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()); 
    } 



} 

Ve evet context den MuleClient biraz daha verimlidir alma:

MuleClient client = muleContext.getClient(); 
+0

Teşekkürler! Bu güzel bir çözümdür, ancak eğer muleContext.getClient() ile bir 'client.send 'kullanırsam bu bana bir hata döndürür' MuleClient türünde yöntem (String, MuleMessage) argümanları için geçerli değildir (String, Dize) 'Dizeyle MuleMessage'ı nasıl oluşturabilirim? – gtx911

+0

'(Dize url, Nesne yükü, Harita messageProperties)' boş –

+0

O ** kullanımdan kaldırıldı ** olarak 3 argüman geçmesine göndermek, kullanabileceğim eşsiz bir yöntemdir: '(Dize url göndermek, MuleMessage mesajı) ' – gtx911