Thé*_*ard 9 java sqlite android unit-testing
我是单元测试的新手,我想测试我的SQLiteDataBase.
我有一个名为MySQLiteHelper的类,它扩展了SQLiteOpenHelper.我有一个名为LocationDataHandler的类,我用它来添加或删除我的DataBase中的元素.我有一个类LocationDataHandlerTest,它扩展了AndroidTestCase,以测试我的LocationDataHandler类.
我正在尝试测试我的SQLite数据库,但我似乎在所有不同的上下文之间有点迷失.
这是我的代码:
//Context context = new Activity();
//IsolatedContext context = getMockContext();
//Context context = new MockContext();
//Context context = getInstrumentation().getContext();
Context context = getContext();
helper = new MySQLiteHelper(context);
assertNotNull(helper);
SQLiteDatabase db = helper.getWritableDatabase();
assertNotNull(db); <---- it fails here !
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我尝试过许多不同的环境,我看到人们使用和使用它们.我真的不明白为什么它在我的情况下不起作用.
我的问题是测试在"assertNotNull(db);"行上失败了 这意味着我永远无法检索我的数据库.
我这样做是错误的吗?我没有使用正确的背景吗?
编辑:这是我的logcat:
junit.framework.AssertionFailedError
at junit.framework.Assert.fail(Assert.java:55)
at junit.framework.Assert.assertTrue(Assert.java:22)
at junit.framework.Assert.assertNotNull(Assert.java:256)
at junit.framework.Assert.assertNotNull(Assert.java:248)
at junit.framework.TestCase.assertNotNull(TestCase.java:417)
at com.databerries.LocationDataHandlerTest.testAddLocation(LocationDataHandlerTest.java:72)
Run Code Online (Sandbox Code Playgroud)
是的,这是一个上下文问题。所有这些上下文(包括您注释掉的上下文)都是空的。
您可以创建一个上下文:
context = new MockContext();
Run Code Online (Sandbox Code Playgroud)
对于与您的应用程序相同的数据库(或其他资源),您可以使用(因为您使用的是 AndroidTestCase):
context = getInstrumentation().getContext();
Run Code Online (Sandbox Code Playgroud)
有一种创建和使用 RoamingDelegatingContext 的正确方法,但您的测试似乎不需要它。
您可以考虑阅读Android 测试基础知识,以帮助了解一些测试问题以及所需的访问/资源级别。
| 归档时间: |
|
| 查看次数: |
2723 次 |
| 最近记录: |