30

テストしたいコードがいくつかあります。リソースにあるさまざまな文字列から文字列が適切に構成されているかどうかを確認したいと思います。ここでの課題は、私のリソースで複数の翻訳を処理することです。デスクトップ アプリケーションをテストするときにロケールが問題になる可能性があり、ロケールに依存しないテストを作成することをお勧めします。

プログラムでロケールを設定できることがわかりましたが、推奨されませんでした ( Android でプログラムによって言語を変更するを参照)。この質問は、アプリを正常に実行しているときに実行時にロケールを変更することを目的としていますが、私の問題に対するより良い解決策があるかどうか疑問に思っていました.

4

2 に答える 2

63

テストのみの場合は、問題なくプログラムでロケールを変更できます。アプリの構成が変更され、新しいロケールでコードをテストできるようになります。ユーザーが変更した場合と同じ効果があります。テストを自動化したい場合は、ここで説明されadb shellているようにロケールを変更するスクリプトを作成し、後でテストを開始できます。

英語、ドイツ語、スペイン語のロケールで「キャンセル」という単語の翻訳をテストする例を次に示します。

public class ResourcesTestCase extends AndroidTestCase {

    private void setLocale(String language, String country) {
        Locale locale = new Locale(language, country);
        // here we update locale for date formatters
        Locale.setDefault(locale);
        // here we update locale for app resources
        Resources res = getContext().getResources();
        Configuration config = res.getConfiguration();
        config.locale = locale;
        res.updateConfiguration(config, res.getDisplayMetrics());
    }

    public void testEnglishLocale() {
        setLocale("en", "EN");
        String cancelString = getContext().getString(R.string.cancel);
        assertEquals("Cancel", cancelString);
    }

    public void testGermanLocale() {
        setLocale("de", "DE");
        String cancelString = getContext().getString(R.string.cancel);
        assertEquals("Abbrechen", cancelString);
    }

    public void testSpanishLocale() {
        setLocale("es", "ES");
        String cancelString = getContext().getString(R.string.cancel);
        assertEquals("Cancelar", cancelString);
    }

}

Eclipse での実行結果は次のとおりです。

ここに画像の説明を入力

アンドロイド O アップデート.

Android O メソッドで実行する場合Locale.setDefault(Category.DISPLAY, locale)は、使用する必要があります (詳細については、動作の変更を参照してください)。

于 2014-02-16T10:46:58.550 に答える