私はWebサービスを消費するクライアントを実装しています。私は依存関係を減らしたいし、Webサービスを模擬することに決めました。
私はmockitoを使用していますが、インターフェイスだけでなく、クラスをモックすることができるEasyMockと比べて利点があります。しかし、それはポイントではありません。Webサービスを模擬する戦略
は私のテストでは、私はこのコードを持っている:
// Mock the required objects
Document mDocument = mock(Document.class);
Element mRootElement = mock(Element.class);
Element mGeonameElement = mock(Element.class);
Element mLatElement = mock(Element.class);
Element mLonElement = mock(Element.class);
// record their behavior
when(mDocument.getRootElement()).thenReturn(mRootElement);
when(mRootElement.getChild("geoname")).thenReturn(mGeonameElement);
when(mGeonameElement.getChild("lat")).thenReturn(mLatElement);
when(mGeonameElement.getChild("lon")).thenReturn(mLonElement);
// A_LOCATION_BEAN is a simple pojo for lat & lon, don't care about it!
when(mLatElement.getText()).thenReturn(
Float.toString(A_LOCATION_BEAN.getLat()));
when(mLonElement.getText()).thenReturn(
Float.toString(A_LOCATION_BEAN.getLon()));
// let it work!
GeoLocationFetcher geoLocationFetcher = GeoLocationFetcher
.getInstance();
LocationBean locationBean = geoLocationFetcher
.extractGeoLocationFromXml(mDocument);
// verify their behavior
verify(mDocument).getRootElement();
verify(mRootElement).getChild("geoname");
verify(mGeonameElement).getChild("lat");
verify(mGeonameElement).getChild("lon");
verify(mLatElement).getText();
verify(mLonElement).getText();
assertEquals(A_LOCATION_BEAN, locationBean);
何私のコードに示すことであるI「マイクロテスト」がかかるオブジェクト。それは私のテストで私の生産的なコードを実装するようなものです。結果xmlの例はLondon on GeoNamesです。 私の意見では、それはあまりに細かすぎます。
しかし、私はeverystepを与えずにWebサービスを模擬することができますか?モックオブジェクトにXMLファイルを返すだけでいいですか?
コードに関するものではなく、のアプローチです。
私はあなたが本当に結果を使用するコードにWebサービスから返された結果をあざけることにしたいのJUnit 4.xとMockito 1.7
ありがとうございました。だから、あなたはどのように "ウェブサービスを模倣する"でしょうか? – guerda
通常、私はインターフェイスを宣言し、インターフェイスを実装し、Webサービスをインスタンス化するWebサービスラッパーを作成します。 – lomaxx
結果を確認するだけで、Webサービスのコンシューマーが返しますか? – guerda