I am getting the following error:
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: apartments)
In realit
I had the same problem when running my unit tests from Robolectric on Android platform. The problem turned out to be related to something to do with using a singleton pattern on my DatabaseHelper class which was being reused by all my unit tests as it was a static object created by a base class for all my unit tests.
In my case the fix was to set the static variable caching the singleton instance inside the DatabaseHelper to null after each test. SO the base class looks something like this for me:
import com.foo.app.HomeActivity;
import com.foo.contentProvider.DatabaseHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertNotNull;
@Config(shadows = {ShadowCaseSensitiveSQLiteCursor.class})
@RunWith(RobolectricTestRunner.class) // <== REQUIRED for Robolectric!
public class RobolectricTestBase {
protected HomeActivity activity;
protected Context context;
protected DatabaseHelper databaseHelper;
@BeforeClass
public static void setupClass() {
// To redirect Robolectric to stdout
System.setProperty("robolectric.logging", "stdout");
}
@Before
public void setup() {
activity = (HomeActivity) Robolectric.buildActivity(HomeActivity.class).create().get();
assertNotNull(activity);
context = activity.getApplicationContext();
assertNotNull(context);
databaseHelper = DatabaseHelper.getInstance(context);
assertNotNull(databaseHelper);
}
@After
public void tearDown() {
databaseHelper.close(); //This is where singleton INSTANCE var is set to null
}
}