在尝试为我正在工作的项目开发一些单元测试时,我遇到了需要测试DB-behaviour的问题。我正在尝试创建内存中的DB(SQLite)
虽然我认为这个相当基本的测试可以按要求完成,但它总是返回空数据库,这并不是我所期望的。
package be.wgkovl.evdt.Util;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.test.mock.MockContext;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith( PowerMockRunner.class )
public class ClassForStack {
SQLiteDatabase db;
Context context;
private Cursor test() {
if (db != null) {
return db.rawQuery("Select * from myTable", new String[]{});
} else {
System.out.println("Db is null :-(");
}
return null;
}
private String[] emtpyArgument = new String[]{};
@Before
public void setup() {
System.out.println("Setting up");
context = new MockContext();
SQLiteOpenHelper dummy = new SQLiteOpenHelper(context, "SomeName.memory", null, 1) {
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
@Override
public void onCreate(SQLiteDatabase db) {
}
};
String basicInitQuery = "CREATE TABLE IF NOT EXISTS myTable(id INTEGER PRIMARY KEY DESC, value TEXT)";
String basicInsertQuery = "INSERT INTO myTable(id, value) VALUES (1,?)";
db = dummy.getWritableDatabase();
}
@Test
public void baseDbTest() {
Cursor c = test();
if (c != null) {
System.out.println(c.getColumnNames());
System.out.println(c.getColumnCount());
System.out.println("Starting test");
}
}
}我在Stackoverflow上研究了几种不同的解决方案,但似乎没有一种能够为我指出正确的解决方案。它们在这里列出
getWritableDatabase returns null
Android Sqlite always null even after calling getWritableDatabase()
Create SQLite database in android
SQLite getReadableDatabase() returns NULL
SQLiteOpenHelper failing to call onCreate?
我做错了什么,我得到了一个空的数据库,但没有任何类型的错误或异常?
发布于 2018-07-12 22:37:50
您是否忘记在onCreate()中创建表?
db.execSQL(basicInitQuery);https://stackoverflow.com/questions/51308102
复制相似问题