Android JUnit4 测试 - 从哪里获取上下文?
Android JUnit4 Testing - Where to get Context from?
我必须构建一个使用 sqlite 的应用程序。现在我想写我的单元测试。这些单元测试应该测试我的 class SQLiteBridge
。 SQLiteBridge
为模型的每个子 class 提供 DAO。
现在我遇到了问题,我需要一个上下文来创建我的 SQLiteBridge
。 SQLiteBridge
在系统上创建并处理 SQLite 数据库..
从哪里获取上下文对象?
我的设置如下(所以我使用的是 Junit4 [感谢上帝]):
http://tools.android.com/tech-docs/unit-testing-support
编辑:我希望有一种方法可以像旧的 AndroidTestCase
一样在不丢失 Junit4 的情况下进行扩展。 :)
如此处所述:https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide
使用 InstrumentationRegistry 获取上下文。
但是,如果您直接调用 InstrumentationRegistry.getContext()
,您可能会在打开数据库时遇到异常。我相信这是因为 getContext() 返回的上下文指向仪器的上下文,而不是您的应用程序/单元测试的上下文。而是使用 InstrumentationRegistry.getInstrumentation().getTargetContext()
例如:
@RunWith(AndroidJUnit4.class)
public class SqliteTest {
Context mMockContext;
@Before
public void setUp() {
mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");
}
}
RenamingDelegatingContext 只是在 file/database 名称前加上 test_ 前缀,以防止您覆盖同一模拟器中可能拥有的数据。
jUnit 4(可能还有其他版本的 jUnit)和 androidx 使用:
ApplicationProvider.getApplicationContext();
我必须构建一个使用 sqlite 的应用程序。现在我想写我的单元测试。这些单元测试应该测试我的 class SQLiteBridge
。 SQLiteBridge
为模型的每个子 class 提供 DAO。
现在我遇到了问题,我需要一个上下文来创建我的 SQLiteBridge
。 SQLiteBridge
在系统上创建并处理 SQLite 数据库..
从哪里获取上下文对象?
我的设置如下(所以我使用的是 Junit4 [感谢上帝]): http://tools.android.com/tech-docs/unit-testing-support
编辑:我希望有一种方法可以像旧的 AndroidTestCase
一样在不丢失 Junit4 的情况下进行扩展。 :)
如此处所述:https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide 使用 InstrumentationRegistry 获取上下文。
但是,如果您直接调用 InstrumentationRegistry.getContext()
,您可能会在打开数据库时遇到异常。我相信这是因为 getContext() 返回的上下文指向仪器的上下文,而不是您的应用程序/单元测试的上下文。而是使用 InstrumentationRegistry.getInstrumentation().getTargetContext()
例如:
@RunWith(AndroidJUnit4.class)
public class SqliteTest {
Context mMockContext;
@Before
public void setUp() {
mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_");
}
}
RenamingDelegatingContext 只是在 file/database 名称前加上 test_ 前缀,以防止您覆盖同一模拟器中可能拥有的数据。
jUnit 4(可能还有其他版本的 jUnit)和 androidx 使用:
ApplicationProvider.getApplicationContext();