Je suis nouveau au Junit Testing.
Quelqu'un peut-il m'aider, comment tester ma classe SQLiteOpenHelper
.
Cela signifie quelles classes je dois implémenter et comment tester ma base de données et mes tables ..___. J'utilise Eclipse IDE.
À partir du niveau 24 de l'API, RenamingDelegatingContext
est obsolète. Un autre thread suggère d 'utiliser Robolectric ' s RuntimeEnvironment.application
comme décrit dans cet article Medium .
Pour un simple 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
}
}
J'ai créé un 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 wich is not connected to the standard database of the App
}
}
Vous pouvez écrire un test de base de données Android dans le style JUnit4 aussi. Vous avez juste besoin d'ajouter la dépendance suivante dans votre base de données
androidTestCompile('com.Android.support.test:runner:0.3'){
exclude group: 'com.Android.support', module: 'support-annotations'
}
Et marquez la classe de test comme suit
@RunWith(AndroidJUnit4.class)
public class DatabaseTest {
@Test
public void myFirstTest(){
//your test
}
}
RenamingDelegatingContext est maintenant obsolète en v24. Utilisez Robolectric pour tester. Un exemple (en Kotlin) comme ci-dessous
@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
}
}
Vous pouvez obtenir l'intégralité de la source du projet à partir de https://github.com/elye/demo_simpledb_test
Vous pouvez obtenir des précisions à partir de https://medium.com/@elye.project/Android-sqlite-database-unit-testing-is-easy-a09994701162#.s44tity8x
cette question est très abstraite .. Je vous recommande de lire le Guide de test Android. Il contient quelques exemples simples de tests d'applications Android.
Bibliothèque de prise en charge des tests Android
Sans connaître votre code, je suppose que votre SQLiteOpenHelper est utilisé par une activité ou un service. Je pense que cette Activités/Services est que vous devez tester.
Un bon début devrait être ActivityInstrumentationTestCase2 pour une activité ou ServiceTestCase pour un service.
J'espère que ça aide.