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));
}
}
它显示:
W/App: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()
пјҢдҪҶжөӢиҜ•з»“жһңеӨұиҙҘзӣёеҗҢгҖӮ - fstephany