ইনস্ট্রুমেন্টেড টেস্ট Android ডিভাইসে রান করে, তা ফিজিক্যাল বা এমুলেটেড যাই হোক না কেন। তাই, তারা Android ফ্রেমওয়ার্ক API-এর সুবিধা নিতে পারে। ইনস্ট্রুমেন্টেড টেস্ট তাই লোকাল টেস্টের চেয়ে বেশি বিশ্বস্ততা প্রদান করে, যদিও সেগুলি অনেক বেশি ধীরে চলে।
আমরা শুধুমাত্র সেইসব ক্ষেত্রে ইন্সট্রুমেন্টেড টেস্ট ব্যবহার করার সাজেশন দিই যেখানে আপনাকে অবশ্যই আসল ডিভাইসের আচরণের বিরুদ্ধে টেস্ট করতে হবে। AndroidX Test একাধিক লাইব্রেরি প্রদান করে যা প্রয়োজন হলে ইনস্ট্রুমেন্টেড টেস্ট লেখার কাজ সহজ করে দেয়।
আপনার টেস্টিং এনভায়রনমেন্ট সেট-আপ করা
আপনার Android Studio প্রোজেক্টে, আপনি module-name/src/androidTest/java/-এ ইনস্ট্রুমেন্টেড টেস্টের জন্য সোর্স ফাইল স্টোর করেন। আপনি নতুন প্রোজেক্ট তৈরি করার সময় এই ডিরেক্টরি আগে থেকেই থাকে এবং
এতে একটি উদাহরণ হিসেবে ইনস্ট্রুমেন্টেড টেস্ট থাকে।
শুরু করার আগে, আপনাকে AndroidX Test API যোগ করতে হবে, যা আপনাকে দ্রুত
আপনার অ্যাপের জন্য ইন্সট্রুমেন্টেড টেস্ট কোড তৈরি এবং রান করতে দেয়। AndroidX টেস্টে
JUnit 4 টেস্ট রানার ,AndroidJUnitRunner এবং ফাংশনাল UI টেস্টের জন্য API অন্তর্ভুক্ত থাকে
যেমন Espresso, UI Automator এবং Compose টেস্ট।
এছাড়াও, AndroidX Test-এর মাধ্যমে প্রদান করা টেস্ট রানার ও নিয়ম API ব্যবহার করার জন্য আপনার প্রোজেক্টের জন্য Android টেস্টিং ডিপেন্ডেন্সি কনফিগার করতে হবে।
আপনার অ্যাপের টপ-লেভেল build.gradle ফাইলে, আপনাকে এইসব লাইব্রেরি
ডিপেন্ডেন্সি হিসেবে উল্লেখ করতে হবে:
dependencies {
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
// Optional -- UI testing with Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
// Optional -- UI testing with UI Automator
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
// Optional -- UI testing with Compose
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}
আপনি AndroidX রিলিজ নোট এবং Compose UI রিলিজ নোট-এ লেটেস্ট ভার্সন খুঁজে পেতে পারেন।
JUnit 4 টেস্ট ক্লাস ব্যবহার করতে এবং টেস্ট ফিল্টারিংয়ের মতো ফিচারে অ্যাক্সেস পেতে,
আপনার প্রোজেক্টে ডিফল্ট টেস্ট ইনস্ট্রুমেন্টেশন রানার হিসেবে AndroidJUnitRunner
নির্দিষ্ট করতে ভুলবেন না। এর জন্য আপনার অ্যাপের মডিউল-লেভেল build.gradle ফাইলে
নিম্নলিখিত সেটিংস অন্তর্ভুক্ত করুন:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
একটি ইনস্ট্রুমেন্টেড টেস্ট ক্লাস তৈরি করুন
আপনার ইনস্ট্রুমেন্টেড টেস্ট ক্লাস JUnit 4 টেস্ট ক্লাস হওয়া উচিত যা লোকাল টেস্ট তৈরি করা বিভাগে বর্ণিত ক্লাসের মতো।
একটি ইনস্ট্রুমেন্টেড JUnit 4 টেস্ট ক্লাস তৈরি করতে, আপনার ডিফল্ট টেস্ট রানার হিসেবে AndroidJUnit4 উল্লেখ করুন।
LogHistory ক্লাসের জন্য Parcelable ইন্টারফেস সঠিকভাবে প্রয়োগ করা হয়েছে কিনা তা যাচাই করতে
আপনি কীভাবে ইনস্ট্রুমেন্টেড টেস্ট লিখতে পারেন তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
import android.os.Parcel import android.text.TextUtils.writeToParcel import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith const val TEST_STRING = "This is a string" const val TEST_LONG = 12345678L // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @SmallTest class LogHistoryAndroidUnitTest { private lateinit var logHistory: LogHistory @Before fun createLogHistory() { logHistory = LogHistory() } @Test fun logHistory_ParcelableWriteRead() { val parcel = Parcel.obtain() logHistory.apply { // Set up the Parcelable object to send and receive. addEntry(TEST_STRING, TEST_LONG) // Write the data. writeToParcel(parcel, describeContents()) } // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0) // Read the data. val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel) createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> -> // Verify that the received data is correct. assertThat(createdFromParcelData.size).isEqualTo(1) assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING) assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG) } } }
জাভা
import android.os.Parcel; import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.google.common.truth.Truth.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4.class) public class LogHistoryAndroidUnitTest { public static final String TEST_STRING = "This is a string"; public static final long TEST_LONG = 12345678L; private LogHistory mLogHistory; @Before public void createLogHistory() { mLogHistory = new LogHistory(); } @Test public void logHistory_ParcelableWriteRead() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. assertThat(createdFromParcelData.size()).isEqualTo(1); assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING); assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG); } }
ইনস্ট্রুমেন্টেড টেস্ট রান করা
ইনস্ট্রুমেন্টেড টেস্ট আসল ডিভাইস বা এমুলেটরে রান করা যেতে পারে। Android Studio গাইড থেকে আপনি জানতে পারবেন কীভাবে:
অতিরিক্ত রিসোর্স
UI টেস্ট সাধারণত ইন্সট্রুমেন্টেড টেস্ট হয় যা UI-এর সঠিক আচরণ যাচাই করে। এগুলি Espresso বা Compose Test-এর মতো ফ্রেমওয়ার্ক ব্যবহার করে। আরও জানতে, UI টেস্টিং গাইড পড়ুন।
ইনস্ট্রুমেন্টেশন টেস্ট ব্যবহার করার ব্যাপারে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্স দেখুন।