ডেটা স্টোর ও ফিরিয়ে আনতে অথবা অন্যান্য অ্যাপের জন্য ডেটা অ্যাক্সেসযোগ্য করতে আপনি যদি কোনও কন্টেন্ট প্রোভাইডার প্রয়োগ করেন, তাহলে আপনার প্রোভাইডারকে পরীক্ষা করে দেখা উচিত যাতে এটি অপ্রত্যাশিতভাবে আচরণ না করে। এই পাঠে পাবলিক কন্টেন্ট প্রোভাইডার কীভাবে টেস্ট করতে হয় তা বর্ণনা করা হয়েছে এবং এটি আপনার নিজের অ্যাপে ব্যক্তিগত রাখা প্রোভাইডারের ক্ষেত্রেও প্রযোজ্য।
কন্টেন্ট প্রোভাইডারের জন্য ইন্টিগ্রেশন টেস্ট তৈরি করুন
কন্টেন্ট প্রোভাইডার আপনাকে আসল ব্যবহারকারীর ডেটা অ্যাক্সেস করতে দেয়, তাই এটি নিশ্চিত করা গুরুত্বপূর্ণ যে আপনি একটি বিচ্ছিন্ন টেস্টিং এনভায়রনমেন্টে কন্টেন্ট প্রোভাইডার পরীক্ষা করছেন। এই পদ্ধতি আপনাকে শুধুমাত্র টেস্ট কেসে স্পষ্টভাবে সেট করা ডেটা ডিপেন্ডেন্সির বিরুদ্ধে রান করার অনুমতি দেয়। এর অর্থ হল, আপনার টেস্টের ফলে আসল ব্যবহারকারীর ডেটা পরিবর্তিত হয় না। যেমন, আগের টেস্টের ডেটা থেকে যাওয়ার কারণে ব্যর্থ হয়েছে এমন টেস্ট লেখা এড়িয়ে চলুন। একইভাবে, আপনার টেস্টে কোনও পরিষেবা প্রদানকারীর থেকে আসল পরিচিতির তথ্য যোগ করা বা মুছে ফেলা এড়ানো উচিত।
আপনার কন্টেন্ট প্রোভাইডারকে আলাদাভাবে পরীক্ষা করতে, ProviderTestCase2
ক্লাস ব্যবহার করুন। এই ক্লাস আপনাকে Android মক অবজেক্ট ক্লাস যেমন
IsolatedContext এবং MockContentResolver ব্যবহার করার অনুমতি দেয় যাতে আপনি আসল ব্যবহারকারীর ডেটা প্রভাবিত না করেই ফাইল এবং
ডেটাবেস তথ্য অ্যাক্সেস করতে পারেন।
আপনার ইন্টিগ্রেশন টেস্ট JUnit 4 টেস্ট ক্লাস হিসেবে লেখা উচিত। JUnit 4 টেস্ট ক্লাস তৈরি করা এবং JUnit 4 অ্যাসারশন ব্যবহার করার ব্যাপারে আরও জানতে, লোকাল ইউনিট টেস্ট ক্লাস তৈরি করুন দেখুন।
আপনার কন্টেন্ট প্রোভাইডারের জন্য ইন্টিগ্রেশন টেস্ট তৈরি করতে, আপনাকে অবশ্যই এইসব ধাপ অনুসরণ করতে হবে:
ProviderTestCase2-এর সাবক্লাস হিসেবে আপনার টেস্ট ক্লাস তৈরি করুন।- আপনার ডিফল্ট টেস্ট রানার হিসেবে AndroidX Test যে
AndroidJUnitRunnerক্লাস প্রদান করে সেটি উল্লেখ করুন। ApplicationProviderক্লাস থেকেContextঅবজেক্ট সেট করুন। উদাহরণ হিসেবে নিচের স্নিপেট দেখুন।
Kotlin
@Throws(Exception::class) override fun setUp() { super.setUp() context = ApplicationProvider.getApplicationContext<Context>() }
জাভা
@Override protected void setUp() throws Exception { super.setUp(); setContext(ApplicationProvider.getApplicationContext()); }
ProviderTestCase2 কীভাবে কাজ করে
আপনি ProviderTestCase2-এর সাবক্লাস সহ কোনও পরিষেবা প্রদানকারীকে পরীক্ষা করেন। এই মূল ক্লাস
AndroidTestCase-এর সাথে যুক্ত, তাই এটি JUnit টেস্টিং ফ্রেমওয়ার্কের পাশাপাশি
অ্যাপ্লিকেশন সংক্রান্ত অনুমতি টেস্ট করার জন্য Android-নির্দিষ্ট পদ্ধতি প্রদান করে। এই ক্লাসের সবচেয়ে গুরুত্বপূর্ণ ফিচার হল এর ইনিশিয়ালাইজেশন, যা আইসোলেটেড টেস্ট এনভায়রনমেন্ট তৈরি করে।
শুরু করা
ProviderTestCase2-এর জন্য কনস্ট্রাক্টরে ইনিশিয়ালাইজেশন করা হয়,
যা সাবক্লাসগুলি তাদের নিজস্ব কনস্ট্রাক্টরে কল করে। ProviderTestCase2
কনস্ট্রাক্টর একটি IsolatedContext অবজেক্ট তৈরি করে যা ফাইল এবং
ডেটাবেস অপারেশন করার অনুমতি দেয় কিন্তু Android সিস্টেমের সাথে অন্যান্য ইন্টার্যাকশন স্টাব আউট করে।
ফাইল এবং ডেটাবেস অপারেশনগুলি নিজেই একটি ডিরেক্টরিতে সঞ্চালিত হয় যা
ডিভাইস বা এমুলেটরের স্থানীয় এবং একটি বিশেষ উপসর্গ রয়েছে।
কনস্ট্রাক্টর তখন টেস্টের জন্য রিজলভার হিসেবে ব্যবহার করার জন্য
একটি MockContentResolver তৈরি করে।
সবশেষে, কনস্ট্রাক্টর টেস্টের অধীনে প্রোভাইডারের একটি ইনস্ট্যান্স তৈরি করে। এটি
একটি সাধারণ ContentProvider অবজেক্ট, তবে এটি IsolatedContext থেকে এর সমস্ত এনভায়রনমেন্ট
তথ্য নেয়, তাই এটি বিচ্ছিন্ন টেস্ট এনভায়রনমেন্টে
কাজ করার জন্য সীমাবদ্ধ। টেস্ট কেস ক্লাসে করা সব টেস্ট এই আইসোলেটেড অবজেক্টের
বিরুদ্ধে রান করে।
আপনি কন্টেন্ট প্রোভাইডারের জন্য ইন্টিগ্রেশন টেস্ট ঠিক সেইভাবেই চালান যেভাবে ইন্সট্রুমেন্টেড ইউনিট টেস্ট চালান।
কী পরীক্ষা করতে হবে
কন্টেন্ট প্রোভাইডারদের পরীক্ষা করার জন্য এখানে কিছু নির্দিষ্ট নির্দেশিকা দেওয়া হল।
- রিজলভার মেথড ব্যবহার করে পরীক্ষা করা: আপনি
ProviderTestCase2-এ প্রোভাইডার অবজেক্ট ইনস্ট্যান্টিয়েট করতে পারলেও, আপনাকে সবসময় উপযুক্ত URI ব্যবহার করে রিজলভার অবজেক্টের মাধ্যমে পরীক্ষা করতে হবে। এটি করলে, আপনি নিশ্চিত করতে পারবেন যে সাধারণ অ্যাপ্লিকেশন যে ইন্ট্যার্যাকশন ব্যবহার করে, আপনিও সেই একই ইন্ট্যার্যাকশন পারফর্ম করে প্রোভাইডারকে পরীক্ষা করছেন। - কন্ট্র্যাক্ট হিসেবে পাবলিক প্রোভাইডার পরীক্ষা করা: আপনি যদি চান যে আপনার প্রোভাইডার
পাবলিক এবং অন্যান্য অ্যাপ্লিকেশনের জন্য উপলভ্য হোক, তাহলে আপনার এটি কন্ট্র্যাক্ট হিসেবে পরীক্ষা করা উচিত।
এটি কীভাবে করবেন তার কিছু উদাহরণ নিচে দেওয়া হল:
- আপনার পরিষেবা প্রদানকারী সর্বজনীনভাবে প্রকাশ করে এমন কনস্ট্যান্টের সাথে পরীক্ষা করুন। যেমন, প্রদানকারীর ডেটা টেবিলের মধ্যে একটিতে কলামের নাম উল্লেখ করে এমন কনস্ট্যান্ট খুঁজুন। এগুলি সবসময় প্রদানকারীর দ্বারা সর্বজনীনভাবে সংজ্ঞায়িত ধ্রুবক হতে হবে।
- আপনার পরিষেবা প্রদানকারীর অফার করা সব URI পরীক্ষা করুন। আপনার পরিষেবা প্রদানকারী একাধিক URI অফার করতে পারে, যার প্রতিটি ডেটার একটি ভিন্ন দিক উল্লেখ করে।
- ভুল URI টেস্ট করুন। আপনার ইউনিট টেস্টে ইচ্ছাকৃতভাবে ভুল URI সহ
প্রোভাইডারকে কল করা উচিত এবং কোনও সমস্যা আছে কিনা তা দেখা উচিত। ভুল URI-এর জন্য
IllegalArgumentExceptionথ্রো করা হল একটি ভালো প্রোভাইডার ডিজাইন।
- স্ট্যান্ডার্ড পরিষেবা প্রদানকারীর ইন্টার্যাকশন পরীক্ষা করা: বেশিরভাগ পরিষেবা প্রদানকারী অ্যাক্সেস করার ছয়টি পদ্ধতি
অফার করে:
query(),insert(),delete(),update(),getType()এবংonCreate()। আপনার টেস্টের মাধ্যমে যাচাই করতে হবে যে এইসব পদ্ধতি কাজ করছে কিনা। - বিজনেস লজিক টেস্ট করা: কন্টেন্ট প্রোভাইডার বিজনেস লজিক প্রয়োগ করলে, আপনাকে সেটি টেস্ট করতে হবে। বিজনেস লজিকের মধ্যে ভুল ভ্যালু ম্যানেজ করা, আর্থিক বা গাণিতিক গণনা, বাদ দেওয়া বা ডুপ্লিকেট একত্রিত করা অন্তর্ভুক্ত।