forked from upstream-mirrors/OpenTracks
Use an in-memory database when running instrumented tests.
- added new TestRunner and new TestApplication - The TestRunner loads TestApplication as the apps Application instance when running the tests - added new interface AppConfig to retrieve the database name - changed Startup (Application) so that it implements AppConfig - changed CustomSQLiteOpenHelper so that it retrieves the database name from the Application instance - Startup provides the production database name - TestApplication provides null which yields an in-mememory database
This commit is contained in:
+1
-1
@@ -59,7 +59,7 @@ android {
|
|||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 31
|
targetSdkVersion 31
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "de.dennisguse.opentracks.TestRunner"
|
||||||
testInstrumentationRunnerArguments clearPackageData: 'true'
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||||
}
|
}
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
|
public class TestApplication extends Startup {
|
||||||
|
@Override
|
||||||
|
public String getDatabaseName() {
|
||||||
|
// null will make SQLiteOpenHelper create an in-memory database
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.runner.AndroidJUnitRunner;
|
||||||
|
|
||||||
|
public class TestRunner extends AndroidJUnitRunner {
|
||||||
|
@Override
|
||||||
|
public Application newApplication(ClassLoader cl, String className, Context context) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
|
||||||
|
return super.newApplication(cl, TestApplication.class.getName(), context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,9 +71,6 @@ import de.dennisguse.opentracks.settings.PreferencesUtils;
|
|||||||
* Tests for the track recording service.
|
* Tests for the track recording service.
|
||||||
*
|
*
|
||||||
* @author Bartlomiej Niechwiej
|
* @author Bartlomiej Niechwiej
|
||||||
* <p>
|
|
||||||
* //TODO ATTENTION: This tests deletes all stored tracks in the database.
|
|
||||||
* So, if it is executed on a real device, data might be lost.
|
|
||||||
*/
|
*/
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class TrackRecordingServiceTest {
|
public class TrackRecordingServiceTest {
|
||||||
|
|||||||
-3
@@ -41,9 +41,6 @@ import static org.junit.Assert.assertFalse;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests insert location.
|
* Tests insert location.
|
||||||
* <p>
|
|
||||||
* //TODO ATTENTION: This tests deletes all stored tracks in the database.
|
|
||||||
* So, if it is executed on a real device, data might be lost.
|
|
||||||
*/
|
*/
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
//TODO Implement as mock test; no need to store data in database
|
//TODO Implement as mock test; no need to store data in database
|
||||||
|
|||||||
-3
@@ -43,9 +43,6 @@ import static org.junit.Assert.assertTrue;
|
|||||||
* Tests for the track recording service, which require a {@link Looper}.
|
* Tests for the track recording service, which require a {@link Looper}.
|
||||||
*
|
*
|
||||||
* @author Bartlomiej Niechwiej
|
* @author Bartlomiej Niechwiej
|
||||||
* <p>
|
|
||||||
* ATTENTION: This tests deletes all stored tracks in the database.
|
|
||||||
* So, if it is executed on a real device, data might be lost.
|
|
||||||
*/
|
*/
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class TrackRecordingServiceTestLooper {
|
public class TrackRecordingServiceTestLooper {
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package de.dennisguse.opentracks;
|
||||||
|
|
||||||
|
public interface AppConfig {
|
||||||
|
/**
|
||||||
|
* Returns the name of the database used by SQLiteOpenHelper.
|
||||||
|
* See {@link android.database.sqlite.SQLiteOpenHelper} for details.
|
||||||
|
* @return SQLite database name.
|
||||||
|
*/
|
||||||
|
String getDatabaseName();
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ import de.dennisguse.opentracks.settings.PreferencesUtils;
|
|||||||
* NOTE: How often actual application startup happens depends on the OS.
|
* NOTE: How often actual application startup happens depends on the OS.
|
||||||
* Not every start of an activity will trigger this.
|
* Not every start of an activity will trigger this.
|
||||||
*/
|
*/
|
||||||
public class Startup extends Application {
|
public class Startup extends Application implements AppConfig {
|
||||||
|
|
||||||
private static final String TAG = Startup.class.getSimpleName();
|
private static final String TAG = Startup.class.getSimpleName();
|
||||||
|
|
||||||
@@ -40,4 +40,9 @@ public class Startup extends Application {
|
|||||||
StrictMode.enableDefaults();
|
StrictMode.enableDefaults();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDatabaseName() {
|
||||||
|
return "database.db";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.AppConfig;
|
||||||
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
@@ -27,11 +28,8 @@ public class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
private static final int DATABASE_VERSION = 31;
|
private static final int DATABASE_VERSION = 31;
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public static final String DATABASE_NAME = "database.db";
|
|
||||||
|
|
||||||
public CustomSQLiteOpenHelper(Context context) {
|
public CustomSQLiteOpenHelper(Context context) {
|
||||||
this(context, DATABASE_NAME);
|
this(context, ((AppConfig) context.getApplicationContext()).getDatabaseName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
|||||||
Reference in New Issue
Block a user