有没有办法测试使用JUnit访问ContentResolver的类?或者我必须使用Robolectric?

时间:2015-07-15 16:36:15

标签: java android android-contentprovider android-testing

我有一个这样的测试类:

public class PostRepositoryTest extends AndroidTestCase {

    Context context;

    @Before
    public void setUp() throws Exception {
        context = new Application();
    }

    @Test
    public void testFindAll() {
        PostRepository postRepository = PostRepository.get(context);
        List<Post> all = postRepository.findAll();
        assertEquals(0, all.size());
    }

}

findAll方法只使用ContentResolver从ContentResolver返回结果。

public List<Post> findAll() {
    Cursor c = new PostSelection().query(context.getContentResolver());
    return listFromCursor(c);
}

在尝试这种方式之前......我通过使用AndroidInstrumentationTestCase2并启动一项活动来检查所有这些内容,但我想避免这种情况。

我想将此作为单元测试。有可能吗?

1 个答案:

答案 0 :(得分:0)

这取决于您是否要在设备上运行此测试用例。如果要在本地JVM上运行而不是在设备上运行,请转到Robolectric。 如果您想在没有AndroidInstrumentationTestCase2的设备上运行,那么您可以使用AndroidJUnitRunner。它基于Junit4规范。 阅读此处的链接: https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html

查看代码示例的基本概念: https://github.com/googlesamples/android-testing/tree/master/unittesting/BasicUnitAndroidTest

如果您根据上述链接设置测试套件,则无需扩展任何类或启动活动。您可以使用以下代码获取上下文对象:

InstrumentationRegistry.getTargetContext();
or
InstrumentationRegistry.getContext();