2016-03-22 10 views
0

これは私がテストに使用mule flow次のとおりです。私のラバプロジェクトミュール - JUnitの送信要求 - ベストプラクティス

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

は私が5 classesを持っています。私はsettersclass@XmlElementに要素@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...] 
} 

:これは一例です。

その後、私はコンフィグ資源を有するフローテストするとき、私はメインクラスを持っている:

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

をしかし、私は残りの4クラスでそれをテストしたいです。

他のクラスでテストするベストプラクティスとは何ですか?

+1

だけの無関係なコメント:ベストプラクティスとして、あなたがするMuleClientを服用する必要があります独自のものを作成するのではなく、MuleContextから取得します。これは '' muleContext.getClient() '' 'です。 – afelisatti

答えて

1

どのようにこのようなものについて:

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



} 

とはいcontextからMuleClientを得ることが多少効率的である:

MuleClient client = muleContext.getClient(); 
+0

ありがとう!それは素晴らしい解決策ですが、 'muleContext.getClient()'で 'client.send'を使用するとエラーが返されます。' MuleClient型のメソッドsend(String、MuleMessage)は引数には適用できません(String、文字列) '文字列でMuleMessageを作成するにはどうすればよいですか? – gtx911

+0

'send(String url、Object payload、Map messageProperties)' 3番目の引数をnullとして渡します。 –

+0

**私は使用できるユニークなメソッドは次のとおりです: 'send(String url、MuleMessage message ) ' – gtx911

関連する問題