কোড ফিজিক্যাল হার্ডওয়্যারের উপর নির্ভরশীল হলে, টেস্ট অটোমেট করা কঠিন হয়ে পড়ে। যেমন, কানেকশন স্ট্যাটাস যাচাই করতে আপনাকে হয়ত ফিজিক্যাল ডিভাইস ম্যানুয়ালি কানেক্ট ও ডিসকানেক্ট করতে হবে। অডিও গ্লাস ও ডিসপ্লে গ্লাসের আলাদা আলাদা ধরন, ক্ষমতা ও ডিভাইস স্টেট থাকার কারণে, এই চ্যালেঞ্জ আরও জটিল হয়ে যেতে পারে। এইসব বিভিন্ন ধরনের কেস পরীক্ষা করতে, প্রজেক্টেড টেস্ট এনভায়রনমেন্টের সেট-আপ ও ম্যানেজমেন্ট অটোমেট করতে প্রজেক্টেড টেস্ট রুল API ব্যবহার করুন। লাইব্রেরি প্রজেক্ট করা ডিভাইস তৈরি করা, কানেকশন স্ট্যাটাস ও ক্ষমতা যাচাই করা ম্যানেজ করে, তাই আপনি অ্যাপের মূল লজিক পরীক্ষা করার উপর ফোকাস করতে পারবেন। বয়েলারপ্লেট কোড না লিখে শক্তিশালী টেস্ট স্যুট তৈরি করতে এইসব API ব্যবহার করুন।
লাইব্রেরি নির্ভরতা যোগ করা
টেস্ট নিয়ম ব্যবহার করতে, আপনার অ্যাপের build.gradle
ফাইলে টেস্টিং আর্টিফ্যাক্ট যোগ করুন:
গ্ৰুভি
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
Kotlin
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 set ব্যবহার করুন। এটি যাচাই করার জন্য সহায়ক যে আপনার অ্যাপ, গ্লাসে কন্টেন্ট প্রজেক্ট করার
চেষ্টা করার আগে হার্ডওয়্যার সাপোর্ট সঠিকভাবে চেক করে
কিনা।
@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ব্যবহার করুন।