Я пытаюсь использовать JUnit и Espresso для создания скриншотов приложения.Проблема в том, что мне также нужно изменить локаль устройства (эмулятора) перед тем, как сделать снимок экрана, и эта часть не работает (без ошибок).Снимок экрана сделан с языком, установленным в устройстве эмулятора, а не с тем, который я установил в тесте.
Я создал LocaleRule для установки языка.
public class LocaleRule implements TestRule {
private final Locale locale;
private Locale mDeviceLocale;
public LocaleRule(Locale locale) {
this.locale = locale;
}
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
mDeviceLocale = Locale.getDefault();
setLocale(locale);
base.evaluate();
} finally {
if (mDeviceLocale != null) {
setLocale(mDeviceLocale);
}
}
}
};
}
private void setLocale(Locale locale) {
Resources resources = InstrumentationRegistry.getTargetContext().getResources();
Locale.setDefault(locale);
Configuration config = new Configuration(resources.getConfiguration());
config.setLocale(locale);
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
}
И этотестовый класс.
@RunWith(AndroidJUnit4.class)
public class CountrySelectionActivityScreenshot {
private final LocaleRule mLocaleRule = new LocaleRule(english());
private final ActivityTestRule mActivityTestRule = new ActivityTestRule<>(CountrySelectionActivity.class);
private final ScreenshotWatcher mScreenshotWatcher = new ScreenshotWatcher();
private final GrantPermissionRule mGrantPermissionRule = GrantPermissionRule.grant(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE);
@Rule
public final RuleChain mRuleChain = RuleChain.outerRule(mLocaleRule)
.around(mScreenshotWatcher)
.around(mGrantPermissionRule)
.around(mActivityTestRule);
@Test
public void countrySelectionActivityPortrait() {
}
}