2017-06-05 14 views
0

私はgetId()メソッドを呼び出すと最初のItemが0を返し、2番目のItem.getId()が1を返すようにスタブのコレクションを作成したいと思います。 getId()メソッドの値は、要素の等しいインデックスでなければなりません。私はこのmockitoを使ってスタブのコレクションを作成する

@Mock(answer = Answers.RETURNS_DEEP_STUBS) 
private List<Item> items; 

@Before 
public void setUp() throws Exception { 
    initMocks(this); 
} 

@Test 
public void mockCollection() throws Exception { 
    when(items.get(0).getId()).thenReturn(0); 
    when(items.get(1).getId()).thenReturn(1); 
    ... 
} 

を試してみてくださいしかし、私はこの例外を取得:

java.lang.ClassCastException: org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$42aa7d0b cannot be cast to com.gubin.designpatterns.behavioural.observer.Item 

私はこの作業を行うことができますどのように?

答えて

0

あなたがする必要があるのは、Itemも同様です。ここで

@Mock 
private Item item1; 
@Mock 
private Item item2; 

@Test 
public void mockCollection() throws Exception { 
    when(items.get(0)).thenReturn(item1); 
    when(items.get(1)).thenReturn(item2); 
    when(item1.getId()).thenReturn(1); 
    when(item2.getId()).thenReturn(2); 
} 
+0

申し訳ありませんが、なぜこの状況でRETURNS_DEEP_STUBSは機能しませんか?私はget(int)メソッドをモックしてからgetId()メソッドをモックしなければならないと思うか、RETURNS_DEEP_STUBSを正しく理解できません。 – user3610700

+0

'RETURNS_DEEP_STUBS'が行うことができることは、送信するパラメータに関係なく同じオブジェクトを返すことです。したがって、パラメータに応じて異なるオブジェクトを返すように指定する方法が必要です。 – alayor

+0

改良のおかげで – user3610700

0

@Mock(answer = Answers.RETURNS_DEEP_STUBS) 
private List<Item> items; 

単に:間違っています。あなた決して実際のコードで作成するのは簡単なクラスを模擬してください。

単純なArrayList(またはListを実装する他のもの)を作成し、それを模擬応答オブジェクトで単純に作成します。期待値を返すように構成されています。

実際にはを使用してください。可能な限りまれにを使用してください。それは素敵で便利なヘルパーですが、あなたがそれなしで行くことができるとき(そして、それはここではとても簡単です);あなたは単にそれをしないでください。

関連する問題