Java 设置数字格式时,Robolectric String.format()的行为无效
在应用程序中,有一个简单的代码:Java 设置数字格式时,Robolectric String.format()的行为无效,java,android,unit-testing,kotlin,robolectric,Java,Android,Unit Testing,Kotlin,Robolectric,在应用程序中,有一个简单的代码: String.format(Locale.getDefault(), "%d", count) 一切正常,但当用户在电话上选择阿拉伯语时,数字将以阿拉伯语文字格式显示(显而易见) 那么问题出在哪里呢? 我想用Locale.US替换Locale.getDefault(),以获得“正常”数字,但也希望为此编写测试 这是一个问题。 在测试中,显示数字为“3”而不是“٢” 我的测试代码: public class SideMenuMainContentViewTest
String.format(Locale.getDefault(), "%d", count)
一切正常,但当用户在电话上选择阿拉伯语时,数字将以阿拉伯语文字格式显示(显而易见)
那么问题出在哪里呢?
我想用Locale.US替换Locale.getDefault(),以获得“正常”数字,但也希望为此编写测试
这是一个问题。
在测试中,显示数字为“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));
}
}
您知道如何改变这种行为并在应用程序运行时之类的测试中获得文字数字吗?要使像٢这样的东方阿拉伯数字出现在单元测试中,您可以将区域设置为
locale.forLanguageTag(“ar-u-nu-arab”)
——使用工厂方法forLanguageTag
和BCP 47语言标记字符串“ar-u-nu-arab”明确指定阿拉伯编号系统。新语言环境(“ar-u-nu-arab”)
不起作用,因为构造函数不解析编号系统
有关Java 8语言环境中编号系统的更多信息,请参阅此链接: