java.lang.NoSuchMethodError:android.content.res.Configuration.setLocale(Ljava / util / Locale;)V

时间:2018-08-03 09:56:28

标签: android

我正在尝试通过从单元测试传递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吗?

1 个答案:

答案 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

Mockito Doc