2011-04-02 49 views
1

我有一個Java方法,我想單元測試,但它需要一個模擬SOAP響應,其中包含多個節點列表和層。我正在用手寫模擬來完成這個工作,也就是手動創建對象並設置值,但是由於響應非常複雜,所以建立響應時會很痛苦。我有一個示例XML響應是否有一種使用XML創建模擬的簡單方法?模擬複雜肥皂響應的最佳方法

另外我看了一下Mockito,它對於簡單的對象看起來很好,但它對於複雜的響應似乎不是很好(我可能沒有充分利用它)。

應用程序堆棧是Java 1.6,Spring 3並使用JAX-WS。

+1

爲什麼不解耦你的代碼和複雜模型?將它轉換成更簡單的東西,並將* *傳遞給您的代碼。 – skaffman 2011-04-02 10:37:40

+0

我需要SOAP消息的內容來聲明我發送了正確的請求。所以我堅持下去。 – irishguy 2011-04-02 13:49:49

+0

我會推薦使用XML文件,一個xml diff工具和JAXB unmarshalling。 – ThomasRS 2016-10-28 12:44:48

回答

0

我做這樣的事情

@WebService 
public class MyWebService { 

     @Autowired 
     private ServiceBean serviceBean; 

     public SomeReturedData getData(SomeInputData inputData) { 
      return serviceBean.getData(inputData); 
     } 
} 

對於我的單元測試,我有「ServiceBean」這是我在注入到@MyWebService,和「爲MyWebService」的模擬instanciation使用部署在「VM內」如所述的傳輸here

通過使用in-vm傳輸,所有XML編組/解組仍然由Web服務框架完成,並且您只需處理Java部分。

現在有人可能會問,爲什麼不直接測試「ServiceBean」,爲什麼需要使用in-vm傳輸來維護WS?好的2件事情,使用in-vm傳輸您可以測試JAXB XML編組/解組是否正常工作,並且它還允許您測試可能爲您的Web服務定義的任何攔截處理程序。

+0

這看起來不錯,我正在做類似的事情。事情是我的ServiceBean是相當複雜的,我不想手動創建對象。我希望使用模擬框架或從示例SOAP請求中創建模擬對象。任何其他想法? – irishguy 2011-04-06 07:57:27

+0

您可能想看看SoapUI工具,它可以讓您啓動被嘲笑的WebService。這意味着您的Junit測試正在調用另一個層,而不是被模擬。 – 2011-07-09 15:32:05