我必须构建一个使用sqlite的应用程序。现在我想写单元测试。这些单元测试应该测试我的班级SQLiteBridge
。 SQLiteBridge
为模型的每个子类提供DAO。
现在我遇到了一个问题,我需要一个上下文来创建我的SQLiteBridge
。 SQLiteBridge
在系统上创建并处理SQLite数据库..
从哪里获取Context-Object?
我的设置就像在这里(所以我使用的是Junit4 [感谢上帝]): http://tools.android.com/tech-docs/unit-testing-support
编辑:我希望有一种类似旧版AndroidTestCase
的方式可以延伸而不会丢失Junit4。 :)
答案 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();