Тест Android JUnit для SQLiteOpenHelper

34

Я новичок в тестировании junit.

Может кто-нибудь мне помочь, как проверить класс SQLiteOpenHelper.

Определяет, какие классы я должен реализовать и как тестировать свои db и таблицы. Я использую Eclipse IDE.

Теги:
junit

4 ответа

61
Лучший ответ

Начиная с уровня API 24, RenamingDelegatingContext устарел. Еще один поток предлагает использовать Robolectric RuntimeEnvironment.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
    }
}

Я создал 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
    }
}
  • 8
    +1 за использование RenamingDelegatingContext() , действительно полезно для тестирования.
  • 1
    Вы не пропустили немного кода? А именно аннотации @Test, super.setUp () и db.open ()?
Показать ещё 14 комментариев
4

Вы можете написать тест базы данных Android в стиле JUnit4. Вам просто нужно добавить следующую зависимость в своей базе данных

androidTestCompile('com.android.support.test:runner:0.3'){
        exclude group: 'com.android.support', module: 'support-annotations'
    }

И отметьте тестовый класс следующим образом

@RunWith(AndroidJUnit4.class)
public class DatabaseTest {
   @Test
   public void myFirstTest(){
      //your test
   }
}
2

RenamingDelegatingContext теперь устарел в версии 24. Используйте Robolectric для тестирования. Пример (в Котлине), как показано ниже

@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
    }
}

Вы можете получить весь источник проекта из https://github.com/elye/demo_simpledb_test

Вы можете получить подробную информацию из https://medium.com/@elye.project/android-sqlite-database-unit-testing-is-easy-a09994701162#.s44tity8x

0

этот вопрос очень абстрактный. Я рекомендую вам прочитать руководство по тестированию Android. В нем есть несколько простых примеров тестирования приложений для Android.

Библиотека поддержки тестирования Android

Обучение тестированию на Android

Не зная ваш код, я полагаю, что ваш SQLiteOpenHelper используется Activity или Service. Я думаю, что эти действия/службы - это то, что вы должны проверить.

Хорошим началом должно быть ActivityInstrumentationTestCase2 для Activity или ServiceTestCase для службы.

Надеюсь, это поможет.

  • 2
    Спасибо приятель. Я прочитал это руководство для Android. Но все же я немного запутался с джунитом.
  • 0
    1-я ссылка не работает.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню