在应用程序中有一个简单的代码:
String.format(Locale.getDefault(), "%d", count)
一切都很好,但是当用户在电话上选择阿拉伯语时,数字将以阿拉伯文字格式显示(显而易见)。
那问题出在哪里?
我想用Locale.US替换Locale.getDefault()以获得“正常”数字,但也想为此编写测试。
有问题。 测试中的Robolectric显示了ex的数字。用“ 3”代替“ ٢”。
我的测试代码:
public class SideMenuMainContentViewTest {
private static final String ARABIC_LANGUAGE_LOCALE_CODE = "ar-rEG";
private SideMenuMainContentView sideMenuMainContentView;
private AttributeSet attributeSet;
@Before
public void setup() {
attributeSet = Robolectric.buildAttributeSet().build();
sideMenuMainContentView = new SideMenuMainContentView(ApplicationProvider.getApplicationContext(), attributeSet);
}
@Test
public void test_getBookedRidesCountText() {
assertEquals("3", sideMenuMainContentView.getBookedRidesCountText(3));
}
@Test
@Config(qualifiers = ARABIC_LANGUAGE_LOCALE_CODE)
public void test_getBookedRidesCountText_notSupportedLanguage() {
assertEquals("3", sideMenuMainContentView.getBookedRidesCountText(3));
}
}
有什么想法可以改变这种行为并在测试中(如运行应用程序时)获取文字数字吗?
答案 0 :(得分:1)
要使٢等东方阿拉伯数字出现在单元测试中,可以使用工厂方法Locale.forLanguageTag("ar-u-nu-arab")
和BCP 47语言标签字符串“ ar-u-nu-”将区域设置设置为forLanguageTag
。阿拉伯”,明确指定了阿拉伯编号系统。 new Locale("ar-u-nu-arab")
不起作用,因为构造方法无法解析编号系统。
有关Java 8语言环境中的编号系统的更多信息,请参见以下链接:https://www.oracle.com/technetwork/java/javase/java8locales-2095355.html#num-systems