簡體   English   中英

使用Robolectric測試Android DecimalFormat

[英]Test Android DecimalFormat with Robolectric

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 /應用程式: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

官方的android文檔所述,在Android RunTime(ART)中運行Java代碼時提供的實現與常規JVM中提供的實現不同。

RoboElectric不在常規的Android手機或仿真器上運行測試,而是在JVM上運行。 在您的主機系統上運行的此JVM沒有經過修改的DecimalFormat運行時實現版本。 因此,據我所知,在JVM中運行測試代碼時,Android提供的功能不可用。 為了能夠使用它,請在android手機上運行測試,但是無論如何,您都可以擺脫RoboElectric的支持,而是使用提供的測試工具

另一個邏輯問題:為什么要測試Android類? 我猜Google已經針對其中的更改編寫了測試並跟蹤了這些更改,因此您不應使用所使用的系統提供的測試功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM