我正在尝试通过从单元测试传递null
语言环境来测试我的代码:
Configuration configuration = new Configuration();
configuration.setLocale(null);
在这里,Configuration
的类型为android.content.res.Configuration
。
如果我CMD单击此方法,则可以看到它存在:
public void setLocale(@Nullable Locale loc) {
setLocales(loc == null ? LocaleList.getEmptyLocaleList() : new LocaleList(loc));
}
但是,我收到一条错误消息,说它不存在。
这是因为我支持的最低API是21,并且该方法不属于该API吗?
无论如何,还有另一种方法可以将Locale
传递给Configuration
吗?
答案 0 :(得分:0)
我想我为您找到了解决方案。您必须使用Mockito
来完成此操作。
示例
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.LocaleList;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Locale;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class Test2 {
@Mock
Context mMockContext;
@Test
public void getLocal() {
Resources resources = Mockito.mock(Resources.class);
when(mMockContext.getResources()).thenReturn(resources);
Configuration configuration = Mockito.mock(Configuration.class);
when(mMockContext.getResources().getConfiguration()).thenReturn(configuration);
LocaleList localeList = Mockito.mock(LocaleList.class);
when(mMockContext.getResources().getConfiguration().getLocales()).thenReturn(localeList);
when(mMockContext.getResources().getConfiguration().getLocales().get(0)).thenReturn(Locale.CANADA);
System.out.println(mMockContext.getResources().getConfiguration().getLocales().get(0));
}
}
System.out
en_CA
Process finished with exit code 0