Я новичок в тестировании junit.
Может кто-нибудь мне помочь, как проверить класс SQLiteOpenHelper
.
Определяет, какие классы я должен реализовать и как тестировать свои db и таблицы. Я использую Eclipse IDE.
Я новичок в тестировании junit.
Может кто-нибудь мне помочь, как проверить класс SQLiteOpenHelper
.
Определяет, какие классы я должен реализовать и как тестировать свои db и таблицы. Я использую Eclipse IDE.
Начиная с уровня 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
}
}
Вы можете написать тест базы данных 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
}
}
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
этот вопрос очень абстрактный. Я рекомендую вам прочитать руководство по тестированию Android. В нем есть несколько простых примеров тестирования приложений для Android.
Библиотека поддержки тестирования Android
Обучение тестированию на Android
Не зная ваш код, я полагаю, что ваш SQLiteOpenHelper используется Activity или Service. Я думаю, что эти действия/службы - это то, что вы должны проверить.
Хорошим началом должно быть ActivityInstrumentationTestCase2 для Activity или ServiceTestCase для службы.
Надеюсь, это поможет.