easymockでこの種の動作を設定する方法がわかりません。説明するために、私は簡単な例を作成しました。 基本的に、私はvoidを返し、1つのマップを取るメソッドを持っています。そして、easymockがマップを変更して、指定したエントリを削除したいと思います。easymock set擬似オブジェクトのメソッドのパラメータに関する期待
私は、次のインタフェースを持っていると仮定します。
public interface Filter{
public void filter(Map<String,String>map);
}
と以下のクラス:
public class MyClass {
private Filter filter;
public MyClass(Filter filter) {
this.filter = filter;
}
public Map<String,String> process(Map<String,String>map) {
filter.filter(map);
return map;
}
}
私はこの動作を設定する方法を見つけ出すことができませんでした:
public class MyClassTest {
/**
* Test method for {@link easy.MyClass#process(java.util.Map)}.
*/
@Test
public void testProcess() {
Map<String, String> map = new HashMap<String, String>();
map.put("one","AAA");
map.put("remove","BBB");
map.put("three","CCC");
Map<String, String> expectedRet = new HashMap<String, String>();
expectedRet.put("one","AAA");
expectedRet.put("three","CCC");
IMocksControl mockery = EasyMock.createControl();
mockery.resetToStrict();
mockery.checkOrder(true);
Filter mockFilter = mockery.createMock("filter", Filter.class);
MyClass m = new MyClass(mockFilter);
mockFilter.filter(map);
// I would like some behaviour that will remove the entry ("remove","BBB")
// how can I define that?
mockery.replay();
m.process(map);
mockery.verify();
assertEquals(expectedRet,map);
}
}
:コードの同じ量では、あなたのテストでは、具体的な
Filter
インスタンスを使用することができます>)、次に2 - あなたは、地図がエントリーをストライプする必要があるという期待をどこに設定しますか?どうぞお分かりですか? – Charbel@Charbel:(1)私の間違い。私は 'filter(map)'の代わりに 'process(map)'を書いて、期待値を設定しました。模倣された 'Filter'オブジェクトは' filter'メソッドを持ちます。 (2)それは事です。フィルターが最終的にエントリーを取り除くという期待を設定する必要はありません。これは、テスト対象のクラスが「フィルタ」である別のテストの懸念事項です。このテストでは、MyClassをテストしています。テストは、理想的には一度に1つに集中する必要があります。 –
基本的には、フィルタによって返される地図があればそれをテストしたいと思っています。 MyClass.processはそれを変更しません。 – Charbel