Библиотека Android изменила класс DecimalFormat, добавив несколько приятных дополнений. Конечно, мне нужно одно из этих дополнений (обозначение значащей цифры: @
).
Когда я тестирую Robolectric, кажется, что стандартный Java Используется класс DecimalFormat, из-за чего мои тесты не выполняются.
Есть ли способ заставить Robolectric использовать версию для Android? Или я должен включить DecimalFormat
в свой проект (скопировать/вставить класс из AOSP?)?
Вот урезанный пример:
Если я запускаю приложение на устройстве со следующим:
import java.text.DecimalFormat;
import java.util.Locale;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DecimalFormat decimalFormat = (DecimalFormat)java.text.NumberFormat.getInstance(Locale.US);
decimalFormat.applyPattern("@@@");
Log.d('SO', decimalFormat.format(0.0567467));
}
}
Он отображает:
С приложением: 0,0567
В модульных тестах:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricGradleTestRunner;
import org.robolectric.annotation.Config;
import java.text.DecimalFormat;
import java.util.Locale;
import static junit.framework.TestCase.assertEquals;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class NumberFormatTest {
@Test
public void testSignificantDigit() {
DecimalFormat decimalFormat = (DecimalFormat)java.text.NumberFormat.getInstance(Locale.US);
decimalFormat.applyPattern("@@@");
assertEquals("0.0567", decimalFormat.format(0.0567467));
}
}
Запуск теста выведет:
junit.framework.ComparisonFailure:
Ожидаемый: 0,0567
Фактический :@@@0
final String format(double value)
. Существуют и другие методы форматирования, которые возвращаютStringBuilder
, но я не использовал их. Тем не менее, я пробовалtoString()
, но тест дал тот же сбой. - person fstephany   schedule 30.09.2015