Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLiteOpenHelper的Android JUnit测试_Android_Sqlite_Junit - Fatal编程技术网

SQLiteOpenHelper的Android JUnit测试

SQLiteOpenHelper的Android JUnit测试,android,sqlite,junit,Android,Sqlite,Junit,我不熟悉junit测试 谁能帮助我,如何测试我的SQLiteOpenHelper类 意味着我必须实现哪些类以及如何测试我的数据库和表。 我正在使用EclipseIDE。这个问题非常抽象。 我建议您阅读Android测试指南。它有一些测试Android应用程序的简单示例 在不了解代码的情况下,我假设您的SQLiteOpenHelper被某个活动或服务使用。我认为这项活动/服务是你必须测试的 活动或服务的ServiceTestCase应该是一个良好的开端 我希望它能有所帮助。从API级别24开始

我不熟悉junit测试

谁能帮助我,如何测试我的
SQLiteOpenHelper

意味着我必须实现哪些类以及如何测试我的数据库和表。
我正在使用EclipseIDE。

这个问题非常抽象。 我建议您阅读Android测试指南。它有一些测试Android应用程序的简单示例

在不了解代码的情况下,我假设您的SQLiteOpenHelper被某个活动或服务使用。我认为这项活动/服务是你必须测试的

活动或服务的ServiceTestCase应该是一个良好的开端


我希望它能有所帮助。

从API级别24开始,
重命名DelegatingContext
已被弃用。线程建议使用的
RuntimeEnvironment.application
,如中所述

旧答案供参考: 对于简单的DatabaseHandler:

公共类MyDatabase扩展了SQLiteOpenHelper{
私有静态最终字符串数据库\u NAME=“DATABASE.db”;
私有静态最终int数据库_VERSION=1;
公共MyDatabase(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
//一些代码
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//一些代码
}
}
我创建了一个AndroidTestCase:

公共类DatabaseTest扩展了AndroidTestCase{
私有数据库;
@凌驾
public void setUp()引发异常{
super.setUp();
RenamingDelegatingContext=新的RenamingDelegatingContext(getContext(),“test”);
db=新的MyDatabase(上下文);
}
@凌驾
public void tearDown()引发异常{
db.close();
super.tearDown();
}
//根据Zainodis注释,仅适用于旧版,在gradle>1.1时无效:
//@试验
公共无效测试入口(){
//这里我有我的新数据库,它没有连接到应用程序的标准数据库
}
}
您也可以。您只需要在数据库中添加以下依赖项

androidTestCompile('com.android.support.test:runner:0.3'){
        exclude group: 'com.android.support', module: 'support-annotations'
    }
并按如下方式标记您的测试类

@RunWith(AndroidJUnit4.class)
public class DatabaseTest {
   @Test
   public void myFirstTest(){
      //your test
   }
}

重命名DelegatingContext现在在v24中不推荐使用。使用机器人分子测试。下面是一个示例(以Kotlin为单位)

您可以从中获取整个项目源代码


你可以从

中获得详细信息,谢谢你,伙计。我读过android指南。但是我仍然对junit有点困惑。我只是更新了链接并添加了一个新的链接。感谢@Ajinkya+1提供的使用
重命名delegatingcontext()
的技巧,这对于测试非常有用。您是否缺少一些代码?即@Test annotations、super.setUp()和db.open()?我认为android测试环境不需要测试注释请参见:super.setUp()方法是空的,但从技术上讲,您可能应该包括它。要访问数据库,您可能需要执行以下操作:db.getWritableDatabase();在gradle:1.1.0、mockito core:1.9.5和junit:4.12的Android Studio中,@Test注释实际上被标记为错误,因此似乎不再需要甚至不允许。相反(据我所知),在您的测试用例之前加上前缀“test”。@Zainodis我根据您的inputWith更新了代码
@RunWith(RobolectricGradleTestRunner::class)
@Config(constants = BuildConfig::class, sdk = intArrayOf(LOLLIPOP), packageName = "com.elyeproj.simpledb")
class ExampleUnitTest {

    lateinit var dbHelper: DbHelper // This is your SQLOpenHelper class

    @Before
    fun setup() {
        dbHelper = DbHelper(RuntimeEnvironment.application) // Your new context from Robolectric
        dbHelper.clearDbAndRecreate() // A function just to clear and recreate DB
    }

    @Test
    @Throws(Exception::class)
    fun testDbInsertion() {

        // Given
        val testStr1 = "testing"
        val testStr2 = "testing"

        // When
        dbHelper.insertText(testStr1)
        dbHelper.insertText(testStr2)

        // Then
        assertEquals(dbHelper.getAllText(), "$testStr1-$testStr2-")
    }

    @After
    fun tearDown() {
        dbHelper.clearDb() // A function just to clear the DB
    }
}