如何在roboelectic中使用限定符来测试语言环境?

时间:2013-12-05 09:27:42

标签: android robolectric

我读过这个:http://robolectric.blogspot.co.uk/2013/05/configuring-robolectric-20.htmlconfig annotation

这似乎很简单,但我无法得到正确的结果,断言失败了预期的“fr”但是“en”。

import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.Resources;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import java.util.Locale;

import static junit.framework.Assert.*;

@RunWith(RobolectricTestRunner.class)
@Config(manifest=Config.NONE)
public class LocaleTest {

    @Config(qualifiers = "fr")
    @Test
    public void shouldBeFrench() {
        resources = new Activity().getResources();
        Locale locale = resources.getConfiguration().locale;
        assertEquals("fr", locale.getLanguage());
    }
}

2 个答案:

答案 0 :(得分:1)

正在进行的关于user2511882回答的评论让我得到了这个答案:

我所做的是在测试项目的类路径中用API 16(Android 4.1.2)替换API 8(Android 2.2)的android.jar。应用程序的实际项目仍然使用API​​ 8中的项目。

之后,@Config开始按手册中的说明正常工作。但是,我的代码中没有@Config(manifest=Config.NONE)

答案 1 :(得分:0)

https://github.com/robolectric/robolectric/issues/669 根据github上的这个问题,您需要将测试项目的api版本更改为4.0以上...您仍然可以保留应用程序的原始版本的> 4.0和@config注释应该对你有用。