যন্ত্রযুক্ত পরীক্ষা তৈরি করুন

ইন্সট্রুমেন্টেড পরীক্ষাগুলি শারীরিক বা অনুকরণীয় হোক না কেন, Android ডিভাইসে চলে। যেমন, তারা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক API-এর সুবিধা নিতে পারে। যন্ত্রযুক্ত পরীক্ষাগুলি তাই স্থানীয় পরীক্ষার চেয়ে বেশি বিশ্বস্ততা প্রদান করে, যদিও তারা অনেক বেশি ধীর গতিতে চলে।

আমরা কেবলমাত্র সেই ক্ষেত্রে ইন্সট্রুমেন্টেড টেস্ট ব্যবহার করার পরামর্শ দিই যেখানে আপনাকে সত্যিকারের ডিভাইসের আচরণের বিরুদ্ধে পরীক্ষা করতে হবে। অ্যান্ড্রয়েডএক্স টেস্ট বেশ কয়েকটি লাইব্রেরি সরবরাহ করে যা প্রয়োজনে ইন্সট্রুমেন্টেড পরীক্ষা লেখা সহজ করে তোলে।

আপনার পরীক্ষার পরিবেশ সেট আপ করুন

আপনার অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে, আপনি module-name/src/androidTest/java/ এ ইনস্ট্রুমেন্টেড পরীক্ষার জন্য সোর্স ফাইল সংরক্ষণ করেন। আপনি একটি নতুন প্রকল্প তৈরি করার সময় এই ডিরেক্টরিটি ইতিমধ্যেই বিদ্যমান থাকে এবং এতে একটি উদাহরণ যন্ত্রযুক্ত পরীক্ষা থাকে৷

আপনি শুরু করার আগে, আপনাকে AndroidX টেস্ট API যোগ করতে হবে, যা আপনাকে আপনার অ্যাপগুলির জন্য দ্রুত যন্ত্রযুক্ত পরীক্ষার কোড তৈরি করতে এবং চালাতে দেয়৷ AndroidX টেস্টে একটি JUnit 4 টেস্ট রানার, AndroidJUnitRunner , এবং কার্যকরী UI পরীক্ষার জন্য APIs যেমন Espresso , UI অটোমেটর এবং কম্পোজ টেস্ট অন্তর্ভুক্ত রয়েছে।

আপনাকে আপনার প্রজেক্টের জন্য Android টেস্টিং নির্ভরতা কনফিগার করতে হবে টেস্ট রানার এবং AndroidX টেস্ট দ্বারা প্রদত্ত নিয়ম API ব্যবহার করার জন্য।

আপনার অ্যাপের শীর্ষ-স্তরের 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 রিলিজ নোট এবং কম্পোজ UI রিলিজ নোটগুলিতে সর্বশেষ সংস্করণগুলি খুঁজে পেতে পারেন৷

JUnit 4 পরীক্ষার ক্লাসগুলি ব্যবহার করতে এবং পরীক্ষা ফিল্টারিংয়ের মতো বৈশিষ্ট্যগুলিতে অ্যাক্সেস পেতে, আপনার অ্যাপের মডিউল-স্তরের build.gradle ফাইলে নিম্নলিখিত সেটিংটি অন্তর্ভুক্ত করে আপনার প্রকল্পে AndroidJUnitRunner কে ডিফল্ট টেস্ট ইন্সট্রুমেন্টেশন রানার হিসাবে নির্দিষ্ট করা নিশ্চিত করুন:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

একটি ইন্সট্রুমেন্টেড টেস্ট ক্লাস তৈরি করুন

আপনার ইন্সট্রুমেন্টেড টেস্ট ক্লাসটি একটি JUnit 4 টেস্ট ক্লাস হওয়া উচিত যা স্থানীয় পরীক্ষাগুলি কীভাবে তৈরি করতে হয় সে বিভাগে বর্ণিত ক্লাসের অনুরূপ।

একটি ইন্সট্রুমেন্টেড JUnit 4 টেস্ট ক্লাস তৈরি করতে, আপনার ডিফল্ট টেস্ট রানার হিসাবে AndroidJUnit4 নির্দিষ্ট করুন।

নিম্নলিখিত উদাহরণটি দেখায় যে LogHistory ক্লাসের জন্য পার্সেলেবল ইন্টারফেস সঠিকভাবে প্রয়োগ করা হয়েছে তা যাচাই করতে আপনি কীভাবে একটি যন্ত্রযুক্ত পরীক্ষা লিখতে পারেন:

কোটলিন

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);
    }
}

যন্ত্রযুক্ত পরীক্ষা চালান

ইন্সট্রুমেন্টেড পরীক্ষাগুলি বাস্তব ডিভাইস বা এমুলেটরগুলিতে চালানো যেতে পারে। অ্যান্ড্রয়েড স্টুডিও গাইডে আপনি শিখতে পারেন কীভাবে:

অতিরিক্ত সম্পদ

UI পরীক্ষাগুলি সাধারণত যন্ত্রযুক্ত পরীক্ষা যা UI এর সঠিক আচরণ যাচাই করে। তারা এসপ্রেসো বা কম্পোজ টেস্টের মতো ফ্রেমওয়ার্ক ব্যবহার করে। আরও জানতে, UI পরীক্ষার নির্দেশিকা পড়ুন।

ইন্সট্রুমেন্টেশন পরীক্ষাগুলি ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন।

নমুনা

কোডল্যাব