mockMap
は実際の実装を使用しているのはなぜですか? これを防止するにはどうすればよいですか?テストを実行する場合0:実際の実装を使用したMockitoモックオブジェクト
when(mockMap.keySet().toArray()[0])...
には、ArrayIndexOutOfBoundsExceptionをスローtestFirstKeyMatch方法において
。
MaxSizeHashMapは、私はにもっと入れしようとしたとき ははIndexOutOfBoundsExceptionをスローし、7の最大サイズとのLinkedHashMapです。
プロファイルは、これに必須ではないものを追跡します。
SuperClass.java
public class SuperClass {
protected String[] days;
protected MaxSizeHashMap<String, String> map;
public SuperClass() {
days = new String[7];
map = new MaxSizeHashMap<String, String>();
//...
}
void updateDays() {
cal = Calendar.getInstance();
for (int i = 0; i < 7; i = i + 1) {
//adds short names "Mon", "Tue", ... to days
days[i] = cal.getDisplayName(Calendar.DAY_OF_WEEK,
Calendar.SHORT, Locale.US);
cal.add(Calendar.DATE, 1);
}
}
void firstKeyMatch(Profile profile) {
updateDays();
//checks if first key of map is not same as days[0]
if (days[0] != map.keySet().toArray()[0]) {
profile.add();
//...
}
}
}
SuperClassTest.java
@RunWith(MockitoJUnitRunner.class)
public class SuperClassTest {
@InjectMocks
private SuperClass spr = new SuperClass();
@Mock
private MaxSizeHashMap<String, String> mockMap;
@Mock
private Profile mockProfile;
//...
@Test
public void testFirstKeyMatch() {
when(mockMap.keySet().toArray()[0]).thenReturn(spr.days[0]);
verify(mockProfile, never()).add();
}
}
この 'とき(mockMap.keySet())を試してみてください。 thenReturn(new HashSet(Arrays.asList( "your day string"))); 'あなたの日の文字列をあなたがテストしている値に置き換えます。 – Abubakkar
実際の実装ではありません、mocksはデフォルト値を返します。 'keySet()'の場合は空のコレクションです。 – Jonathan