Примечание: Сейчас я использую настройку Google recommends для тестирования JUnit в Android Studio.JUnit in Android Studio не использует форматирование валюты
Я пытаюсь выполнить модульное тестирование на куске кода, который хранит значение валюты как двойное и выводит строку в формате этой валюты. Я использую 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 студии как-то не хватает некоторых библиотек Java во время тестирования. Я даже не смог получить символ шекеля программно для ожидаемого значения. Я пытался использовать java.util.Currency
, и это не сработало, а затем я попытался
expectedDisplayValue += ((CurrencyField) field).viewFormat.getCurrency().getSymbol(new Locale("he", "ISR"));
и что не работает. Я должен был явно определить
private String expectedDisplayValue = "45.12 ₪";
Почему форматирование работает во время выполнения, но не в тесте?
Я предполагаю, что языковой стандарт не установлен в JUnit. – chrylis