SQLiteOpenHelper的Android JUnit测试

Kar*_*amy 36 sqlite junit android

我是junit测试的新手.

任何人都可以帮助我,如何测试我的SQLiteOpenHelper课程.

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

Pie*_*tro 66

从API Level 24开始,RenamingDelegatingContext不推荐使用.另一个线程建议使用RobolectricRuntimeEnvironment.application在描述这个媒介文章.

旧答案供参考:

对于一个简单的DatabaseHandler:

public class MyDatabase extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "database.db";
    private static final int DATABASE_VERSION = 1;

    public MyDatabase(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        // some code
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // some code
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个AndroidTestCase:

public class DatabaseTest extends AndroidTestCase {
    private MyDatabase db;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        RenamingDelegatingContext context = new RenamingDelegatingContext(getContext(), "test_");
        db = new MyDatabase(context);
    }

    @Override
    public void tearDown() throws Exception {
        db.close(); 
        super.tearDown();
    }

    //According to Zainodis annotation only for legacy and not valid with gradle>1.1:
    //@Test
    public void testAddEntry(){
        // Here I have my new database which is not connected to the standard database of the App
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用`RenamingDelegatingContext()`的+1,对于测试目的非常有用. (8认同)
  • 我认为android-test-environment不需要Test annotations,请参阅:http://developer.android.com/tools/testing/testing_android.html super.setUp()方法是空的,但从技术上讲,你可能应该包含它.要访问数据库,您可能会执行以下操作:db.getWritableDatabase(); (3认同)
  • 在Android Studio中使用gradle:1.1.0,mockito-core:1.9.5和junit:4.12 @Test注释实际上标记为错误,因此似乎不再需要甚至不允许.相反(据我所知)在前面添加前缀为"test"的测试用例. (2认同)