আপনি যখন Room পার্সিস্টেন্স লাইব্রেরি ব্যবহার করে ডেটাবেস তৈরি করেন, তখন আপনার অ্যাপের ডেটাবেস এবং ব্যবহারকারীদের ডেটার স্থিতিশীলতা যাচাই করা উচিত। এই পৃষ্ঠায় আপনার ডেটাবেস পরীক্ষা করার পদ্ধতি এবং টেস্টগুলো সফলভাবে সম্পন্ন করার জন্য ডিবাগিং ধাপগুলো বর্ণনা করা হয়েছে।
আপনার ডাটাবেস পরীক্ষা করুন
আপনার ডাটাবেস পরীক্ষা করার দুটি উপায় আছে:
- অ্যান্ড্রয়েড চালিত একটি ডিভাইসে
- আপনার হোস্ট ডেভেলপমেন্ট মেশিনে
ডাটাবেস মাইগ্রেশন-সম্পর্কিত নির্দিষ্ট টেস্টিং বিষয়ে তথ্যের জন্য, ‘টেস্টিং মাইগ্রেশনস’ দেখুন।
অ্যান্ড্রয়েড চালিত ডিভাইসে পরীক্ষা করুন
আপনার ডাটাবেস ইমপ্লিমেন্টেশন পরীক্ষা করার জন্য, আমরা আপনাকে অ্যান্ড্রয়েড চালিত ডিভাইসে রান করার মতো একটি JUnit টেস্ট লেখার পরামর্শ দিই। যেহেতু এই টেস্টগুলোর জন্য কোনো অ্যাক্টিভিটির প্রয়োজন হয় না, তাই এগুলো UI টেস্টের চেয়ে দ্রুত চলে।
আপনার টেস্টগুলো সেট আপ করার সময়, সেগুলোকে আরও সুরক্ষিত করার জন্য আপনার ডাটাবেসের একটি ইন-মেমরি সংস্করণ তৈরি করা উচিত, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
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-এর সাহায্যে, আপনি লোকাল JVM JUnit টেস্ট ব্যবহার করে আপনার হোস্ট ডেভেলপমেন্ট মেশিনে ডাটাবেস টেস্ট চালাতে পারেন। এই সেটআপটি একটি অ্যান্ড্রয়েড এমুলেটর বা ডিভাইসের অতিরিক্ত চাপ দূর করে আপনার টেস্টগুলোকে আরও দ্রুত চালাতে সাহায্য করে।
সামঞ্জস্য বজায় রাখতে, BundledSQLiteDriver ব্যবহার করুন। এই ড্রাইভারটিতে সোর্স থেকে কম্পাইল করা SQLite অন্তর্ভুক্ত রয়েছে, যা আপনার হোস্ট মেশিন, অ্যান্ড্রয়েড ডিভাইস এবং iOS ডিভাইসে SQLite-এর হুবহু একই সংস্করণ ব্যবহার করে। এই ড্রাইভারটি ব্যবহার করলে সংস্করণের অমিলজনিত সমস্যা দূর হয়।
JVM টেস্ট সেট আপ করার জন্য, আপনার টেস্ট ডাটাবেস বিল্ডারে BundledSQLiteDriver কনফিগার করুন:
val db = Room.inMemoryDatabaseBuilder<TestDatabase>() .setDriver(BundledSQLiteDriver()) .build()
আপনার মাইগ্রেশনগুলি পরীক্ষা করুন
অ্যাপ আপডেটের কারণে ডাটাবেস স্কিমা পরিবর্তিত হলে, বিদ্যমান অ্যাপ ডেটা ধরে রাখার জন্য Room ইনক্রিমেন্টাল ডাটাবেস মাইগ্রেশন সমর্থন করে। তবে, ভুলভাবে সংজ্ঞায়িত মাইগ্রেশনের কারণে আপনার অ্যাপ ক্র্যাশ করতে পারে। আপনার Room ডাটাবেস মাইগ্রেশনগুলো পরীক্ষা করে নেওয়া নিশ্চিত করুন।
আপনার ডাটাবেস ডিবাগ করুন
আপনার ডাটাবেস ডিবাগ করার জন্য বিভিন্ন টুল ও পদ্ধতি রয়েছে যা আপনি ব্যবহার করতে পারেন।
ডাটাবেস ইন্সপেক্টর ব্যবহার করুন
অ্যান্ড্রয়েড স্টুডিও ৪.১ এবং এর পরবর্তী সংস্করণগুলোতে, ডেটাবেস ইন্সপেক্টর আপনাকে আপনার অ্যাপ চলার সময়েই সেটির ডেটাবেসগুলো পরিদর্শন, কোয়েরি এবং পরিবর্তন করার সুযোগ দেয়। ডেটাবেস ইন্সপেক্টরটি অ্যান্ড্রয়েডের সাথে আসা SQLite সংস্করণের সাথে সামঞ্জস্যপূর্ণ এবং এতে Room-এর সাথে ব্যবহারের জন্য বিশেষ কিছু ফিচার অন্তর্ভুক্ত রয়েছে:
- আপনার DAO ক্লাসগুলো থেকে কোয়েরি চালানোর জন্য গাটার অ্যাকশন ব্যবহার করুন।
- যখন আপনার চলমান অ্যাপ ডেটাতে কোনো পরিবর্তন করে, আপনি ডেটাবেস ইন্সপেক্টরে তাৎক্ষণিকভাবে লাইভ আপডেট দেখতে পারেন।
ডাটাবেস ইন্সপেক্টর সম্পর্কে আরও তথ্যের জন্য, "ডাটাবেস ইন্সপেক্টর দিয়ে আপনার ডাটাবেস ডিবাগ করুন" দেখুন।
কমান্ড লাইন থেকে ডেটা ডাম্প করুন
অ্যান্ড্রয়েড এসডিকে-তে আপনার অ্যাপের ডেটাবেস পরীক্ষা করার জন্য একটি sqlite3 ডেটাবেস টুল অন্তর্ভুক্ত রয়েছে। এতে একটি টেবিলের বিষয়বস্তু প্রিন্ট করার জন্য .dump এবং বিদ্যমান টেবিলের SQL CREATE স্টেটমেন্ট প্রিন্ট করার জন্য .schema এর মতো কমান্ড রয়েছে।
আপনি কমান্ড লাইন থেকেও SQLite কমান্ড চালাতে পারেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
adb -s emulator-5554 shell sqlite3 /data/data/your-app-package/databases/rssitems.db
আরও তথ্যের জন্য, SQLite ওয়েবসাইটে উপলব্ধ sqlite3 কমান্ড লাইন ডকুমেন্টেশন দেখুন।
অতিরিক্ত সম্পদ
আপনার Room ডাটাবেস পরীক্ষা ও ডিবাগ করার বিষয়ে আরও জানতে, নিম্নলিখিত অতিরিক্ত রিসোর্সগুলো দেখুন:
ব্লগ পোস্ট
ভিডিও
- ডাটাবেস ইন্সপেক্টর (অ্যান্ড্রয়েডের ১১ সপ্তাহ)