প্রজেক্টেডটেস্টরুল, ভার্চুয়াল ডিভাইস ম্যানেজমেন্ট
যখন কোড ফিজিক্যাল হার্ডওয়্যারের উপর নির্ভর করে, তখন টেস্ট অটোমেট করা কঠিন হয়ে পড়ে। উদাহরণস্বরূপ, কানেকশনের অবস্থা যাচাই করার জন্য আপনাকে ফিজিক্যাল ডিভাইসটি ম্যানুয়ালি কানেক্ট এবং ডিসকানেক্ট করতে হতে পারে। অডিও গ্লাস এবং ডিসপ্লে গ্লাসের বিভিন্ন প্রকার , সক্ষমতা এবং ডিভাইসের অবস্থার কারণে এই চ্যালেঞ্জটি আরও জটিল হয়ে উঠতে পারে। এই বিভিন্ন ধরনের কেস টেস্ট করার জন্য, একটি প্রোজেক্টেড টেস্ট এনভায়রনমেন্টের সেটআপ এবং ম্যানেজমেন্ট অটোমেট করতে প্রোজেক্টেড টেস্ট রুল এপিআই (Projected Test Rule APIs) ব্যবহার করুন। এই লাইব্রেরিটি প্রোজেক্টেড ডিভাইস তৈরি, কানেকশনের অবস্থা এবং সক্ষমতা যাচাইয়ের কাজ সামলায়, ফলে আপনি আপনার অ্যাপের মূল লজিক টেস্ট করার উপর মনোযোগ দিতে পারেন। বয়লারপ্লেট কোড না লিখে শক্তিশালী টেস্ট স্যুট তৈরি করতে এই এপিআইগুলো ব্যবহার করুন।
লাইব্রেরি নির্ভরতা যোগ করুন
টেস্ট রুলটি ব্যবহার করতে, আপনার অ্যাপের build.gradle ফাইলে টেস্টিং আর্টিফ্যাক্টটি যোগ করুন:
গ্রুভি
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
কোটলিন
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
পরীক্ষার নিয়ম সেট আপ করুন
বেসিক টেস্ট রুলটি সেট আপ করতে, আপনার টেস্ট ক্লাসে রুলটিকে অ্যানোটেট করুন। ডিফল্টরূপে, রুলটি প্রতিটি টেস্ট চালানোর আগে একটি প্রজেক্টেড ডিভাইস সংযোগ করে এবং এর ভিজ্যুয়াল সক্ষমতাগুলো চালু করে।
@get:Rule val projectedTestRule = ProjectedTestRule() private val context: Context get() = ApplicationProvider.getApplicationContext() @Test fun testWithConnectedDevice() { val projectedContext = ProjectedContext.createProjectedDeviceContext(context) assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue() }
অন্যান্য সাধারণ পরিস্থিতি পরীক্ষা করুন
এখন যেহেতু আপনি একটি প্রাথমিক টেস্ট রুল দিয়ে আপনার পরিকল্পিত টেস্ট এনভায়রনমেন্ট সেট আপ করে ফেলেছেন, আপনার অ্যাপের কার্যকারিতা যাচাই করার জন্য অডিও গ্লাস এবং ডিসপ্লে গ্লাসের অন্যান্য সাধারণ সিনারিওগুলো পরীক্ষা করুন।
টেস্ট ডিভাইস সংযোগ বিচ্ছিন্নকরণ
চশমার সাথে সংযোগ বিচ্ছিন্ন হলে আপনার অ্যাপ কীভাবে প্রতিক্রিয়া দেখায় তা পরীক্ষা করতে, isDeviceConnected প্রপার্টিটি ব্যবহার করুন:
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
কোড সম্পর্কে মূল বিষয়গুলো
- এই নিয়মটি প্রতিটি পরীক্ষার আগে
isDeviceConnectedমতো প্রোপার্টিগুলোকে তাদের ডিফল্ট মানে রিসেট করে দেয়।@Afterমেথডগুলোতে আপনাকে ম্যানুয়ালি এই প্রোপার্টিগুলো রিসেট করতে হবে না।
বিভিন্ন ডিভাইসের ক্ষমতা পরীক্ষা করুন
ডিসপ্লে গ্লাসে Jetpack Compose Glimmer দিয়ে তৈরি UI দেখানো যায়। ডিফল্টরূপে, ProjectedTestRule টি CAPABILITY_VISUAL_UI সক্রিয় করে। প্রজেক্টেড ডিভাইসটি ঠিক কী কী সাপোর্ট করবে তা নির্দিষ্ট করতে, capabilities সেটটি ব্যবহার করুন। গ্লাসে কন্টেন্ট প্রজেক্ট করার চেষ্টার আগে আপনার অ্যাপটি হার্ডওয়্যার সাপোর্ট সঠিকভাবে যাচাই করছে কিনা, তা নিশ্চিত করার জন্য এটি কার্যকর।
@Test fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity -> // disable display capability projectedTestRule.capabilities = setOf() runBlocking { // create the controller val controller = ProjectedDeviceController.create(activity) // verify the app recognizes the lack of visual UI support assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI) } }
কোড সম্পর্কে মূল বিষয়গুলো
- এই নিয়মটি প্রতিটি পরীক্ষার আগে
capabilitiesমতো প্রপার্টিগুলোকে তাদের ডিফল্ট মানে রিসেট করে দেয়।@Afterমেথডগুলোতে আপনাকে ম্যানুয়ালি এই প্রপার্টিগুলো রিসেট করতে হবে না। - যখন ডিসপ্লে গ্লাসে প্রদর্শিত কোনো অ্যাক্টিভিটির আচরণ বিশেষভাবে যাচাই করার প্রয়োজন হয়, তখন
launchTestProjectedDeviceActivityব্যবহার করুন।