Я пытаюсь модульного тестирования метод, который делаетMocking Locale.forLanguageTag
public static Context fromLanguageTag(final String languageTag) {
final Context context = new Context();
final Locale locale = Locale.forLanguageTag(languageTag);
context.language = locale.getLanguage().length()==3 ? locale.getLanguage() : locale.getISO3Language();
return context;
}
Чтобы проверить, что мне нужно издеваться java.util.Locale
. Я использую PowerMock и Mockito:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Locale.class })
public class ContextTest {
public void testFromLanguageTag() throws Exception {
mockStatic(Locale.class);
final Locale mockLocale = mock(Locale.class);
when(mockLocale.getLanguage()).thenReturn(LANGUAGE_3_OUTPUT);
when(mockLocale.getISO3Language()).thenReturn(LANGUAGE_ISO);
when(Locale.forLanguageTag(Mockito.eq(LANGUAGE_TAG_LONG_INPUT))).thenReturn(mockLocale);
final Context c = Context.fromLanguageTag(LANGUAGE_TAG_LONG_INPUT);
assertThat(c.getLanguage()).isEqualTo(LANGUAGE_3_OUTPUT);
}
}
Но кажется, издевался метод требует от mockLocale
никогда не называются; вместо этого я получаю java.util.MissingResourceException
от java.util.Locale.getISO3Language
(который я хочу высмеять). Как это исправить?
Решение для моего дела было [Mock System class для получения свойств системы] (http://stackoverflow.com/a/20408354) –