כשיוצרים מסדי נתונים באמצעות ספריית Room persistence, צריך לוודא שהמסד נתונים של האפליקציה והנתונים של המשתמשים יציבים. בדף הזה מוסבר איך לבדוק את מסד הנתונים ולבצע שלבי ניפוי באגים כדי שהבדיקות יעברו בהצלחה.
בדיקת מסד הנתונים
יש שתי דרכים לבדוק את מסד הנתונים:
- במכשיר עם Android
- במחשב הפיתוח של המארח
מידע על בדיקות שספציפיות להעברות של מסדי נתונים זמין במאמר בדיקת העברות.
בדיקה במכשיר עם Android
כדי לבדוק את ההטמעה של מסד הנתונים, מומלץ לכתוב בדיקת JUnit שפועלת במכשיר עם Android. הבדיקות האלה לא דורשות פעילות, ולכן הן רצות מהר יותר מבדיקות ממשק משתמש.
כשמגדירים את הבדיקות, כדאי ליצור גרסה בזיכרון של מסד הנתונים כדי שהבדיקות יהיו הרמטיות יותר, כמו בדוגמה הבאה:
import kotlinx.coroutines.test.runTest @RunWith(AndroidJUnit4::class) class SimpleEntityReadWriteTest { private lateinit var userDao: UserDao private lateinit var db: TestDatabase @Before fun createDb() { val context = ApplicationProvider.getApplicationContext<Context>() db = Room.inMemoryDatabaseBuilder<TestDatabase>(context) .setDriver(BundledSQLiteDriver()) .build() userDao = db.userDao() } @After fun closeDb() { db.close() } @Test fun writeUserAndReadInList() = runTest { val user = User(3, "george") userDao.insert(user) val byName = userDao.findUsersByName("george") assertEquals(byName.single(), user) } }
בדיקה במחשב המארח (JVM)
עם Room KMP, אתם יכולים להריץ בדיקות של מסד נתונים במחשב הפיתוח המארח באמצעות בדיקות JUnit מקומיות של JVM. ההגדרה הזו מאפשרת להריץ את הבדיקות מהר יותר כי היא מבטלת את התקורה של אמולטור או מכשיר Android.
כדי לשמור על עקביות, כדאי להשתמש ב-BundledSQLiteDriver. הדרייבר הזה כולל SQLite שעבר קומפילציה מהמקור, ומשתמש באותה גרסה בדיוק של SQLite במכונת המארח, במכשירי Android ובמכשירי iOS. השימוש במנהל ההתקן הזה מונע בעיות של אי-התאמה בין גרסאות.
כדי להגדיר בדיקות של JVM, צריך להגדיר את BundledSQLiteDriver בבונה של מסד הנתונים לבדיקה:
val db = Room.inMemoryDatabaseBuilder<TestDatabase>() .setDriver(BundledSQLiteDriver()) .build()
בדיקת ההעברות
Room תומכת בהעברות מצטברות של מסד נתונים כדי לשמור נתוני האפליקציה קיימים במקרים שבהם עדכון לאפליקציה משנה את סכימת מסד הנתונים. עם זאת, הגדרה שגויה של העברה עלולה לגרום לקריסה של האפליקציה. חשוב לוודא שבודקים את ההעברות של מסד הנתונים של Room.
ניפוי באגים במסד הנתונים
יש כמה כלים ותהליכים שאפשר להשתמש בהם כדי לנפות באגים במסד הנתונים.
שימוש ב-Database Inspector
ב-Android Studio בגרסה 4.1 ומעלה, הכלי Database Inspector מאפשר לבדוק, לשלוח שאילתות ולשנות את מסדי הנתונים של האפליקציה בזמן שהיא פועלת. הכלי Database Inspector תואם לגרסה של SQLite שמצורפת ל-Android, והוא כולל תכונות מיוחדות לשימוש עם Room:
- אפשר להשתמש בפעולות בשולי עורך הקוד כדי להריץ שאילתות ממחלקות ה-DAO.
- כשמריצים את האפליקציה ומבצעים שינויים בנתונים, אפשר לראות עדכונים בזמן אמת ב-Database Inspector.
מידע נוסף על Database Inspector זמין במאמר ניפוי באגים במסד הנתונים באמצעות Database Inspector.
העברת נתונים משורת הפקודה
Android SDK כולל כלי מסד נתונים לבדיקת מסדי הנתונים של האפליקציה.sqlite3 היא כוללת פקודות כמו .dump להדפסת התוכן של טבלה, ו-.schema להדפסת ההצהרה SQL CREATE של טבלה קיימת.
אפשר גם להריץ פקודות של SQLite משורת הפקודה, כמו בדוגמה הבאה:
adb -s emulator-5554 shell sqlite3 /data/data/your-app-package/databases/rssitems.db
מידע נוסף זמין במסמכי התיעוד של שורת הפקודה של sqlite3 באתר SQLite.
מקורות מידע נוספים
מידע נוסף על בדיקה וניפוי באגים במסד הנתונים של Room זמין במקורות המידע הבאים:
פוסטים בבלוגים
סרטונים
- Database Inspector (11 Weeks of Android)