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

时间:2015-04-03 23:51:00

标签: java junit android-studio junit4 currency-formatting

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

我试图对一段代码进行单元测试,该代码将货币值存储为double,并以该货币的格式输出字符串。我使用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"分别是希伯来语和以色列的代码。如果数字在内部存储为double 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 ₪";

为什么格式化在运行时工作,而不在测试中?

1 个答案:

答案 0 :(得分:0)

事实证明我使用的是错误的ISO 3166-1国家/地区代码。我使用alpha 3代码(“ISR”)而不是alpha 2代码(“IL”),它在应用程序中工作但在测试中没有。当我使用希伯来语时,测试仍然给出了错误的符号和格式,但我会问一个单独的问题。与此同时,我将使用其他一些外币进行测试。