Android Studio 中的 JUnit 未正确使用货币格式

JUnit in Android Studio isn't using currency formatting correctly

注意:我现在 recommends 使用设置 Google 在 Android Studio 中进行 JUnit 测试。

我正在尝试对一段代码进行单元测试,该代码将货币值存储为双精度值并输出该货币格式的字符串。我使用 java.text.NumberFormat 来执行此操作:

public NumberFormat viewFormat;
public NumberFormat editFormat;

public CurrencyField(String languageCode, String countryCode) {
    viewFormat = NumberFormat.getCurrencyInstance(new Locale(languageCode, countryCode));
    viewFormat.setRoundingMode(RoundingMode.FLOOR);

这里是我获取要格式化以显示的值的地方:

public String getDisplayValue()
{
    double numberValue = (double) mValue.getValue();
    return mField.viewFormat.format(numberValue);
}

当我 运行 代码作为 Android 应用程序的一部分时,数字格式正确。例如,如果我使用以色列谢克尔作为我的货币,我调用

Field currencyField = new CurrencyField("he", "ISR");

其中 "he""ISR" 分别是希伯来语和以色列语的代码。如果数字在内部存储为双精度 45.12,则输出为字符串 "45.12 ₪",这是正确的。但是,当我尝试使用 JUnit 运行 相同的代码时,测试输出如下:

org.junit.ComparisonFailure:  
Expected :45.12 ₪  
Actual   :¤ 45.12

在我看来,JUnit 或 Android Studio 在测试期间以某种方式缺少一些 Java 库。我什至无法以编程方式获得预期值的谢克尔符号。我尝试使用 java.util.Currency,但没有用,然后我尝试了

expectedDisplayValue += ((CurrencyField) field).viewFormat.getCurrency().getSymbol(new Locale("he", "ISR"));

那也没用。我必须明确定义

private String expectedDisplayValue = "45.12 ₪";

为什么格式化在 运行 时起作用,但在测试中不起作用?

原来我用错了 ISO 3166-1 国家代码。我使用的是 alpha 3 代码 ("ISR") 而不是 alpha 2 代码 ("IL"),它在应用程序中有效但在测试中无效。当我使用希伯来语时,测试仍然给我错误的符号和格式,但我会为此提出一个单独的问题。同时,我会用一些其他的外币进行测试。