Android JUnit4测试 - 从哪里获取上下文?

时间:2015-05-19 07:57:43

标签: android sqlite unit-testing android-context

我必须构建一个使用sqlite的应用程序。现在我想写单元测试。这些单元测试应该测试我的班级SQLiteBridgeSQLiteBridge为模型的每个子类提供DAO。

现在我遇到了一个问题,我需要一个上下文来创建我的SQLiteBridgeSQLiteBridge在系统上创建并处理SQLite数据库..

从哪里获取Context-Object?

我的设置就像在这里(所以我使用的是Junit4 [感谢上帝]): http://tools.android.com/tech-docs/unit-testing-support

编辑:我希望有一种类似旧版AndroidTestCase的方式可以延伸而不会丢失Junit4。 :)

2 个答案:

答案 0 :(得分:53)

如此处所述:https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide 使用InstrumentationRegistry获取上下文。

但是,如果直接致电InstrumentationRegistry.getContext(),您可能会遇到打开数据库的异常。我相信这是因为getContext()返回的上下文指向了instrumentation的上下文而不是应用程序/单元测试的上下文。而是使用InstrumentationRegistry.getInstrumentation().getTargetContext()

例如:

@RunWith(AndroidJUnit4.class)
public class SqliteTest {

    Context mMockContext;

    @Before
    public void setUp() {
        mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");
    }
}

RenamingDelegatingContext只是在文件/数据库名称前加上test_,以防止您覆盖在同一个模拟器中可能拥有的数据。

答案 1 :(得分:1)

jUnit 4(可能还有其他版本的 jUnit)和 androidx 使用:

ApplicationProvider.getApplicationContext();

见:Android Documentation