উন্নত পরীক্ষার সেটআপ

অ্যান্ড্রয়েড স্টুডিওতে পরীক্ষা করুন এবং কমান্ড লাইন থেকে পরীক্ষা করুন কিভাবে প্রাথমিক পরীক্ষা কনফিগারেশন সেট আপ এবং চালাতে হয়। যাইহোক, যখন আপনার অ্যাপ এবং এর পরীক্ষার প্রয়োজনীয়তাগুলি আরও উন্নত হয়, তখন আপনাকে আপনার পরীক্ষার কনফিগারেশনগুলিকে আরও মানিয়ে নিতে হতে পারে। উদাহরণস্বরূপ, যখন আপনি নিম্নলিখিতগুলি করতে চান তখন আপনার উন্নত পরীক্ষা সেটআপের প্রয়োজন হতে পারে:

  • শুধুমাত্র একটি নির্দিষ্ট বিল্ড ভেরিয়েন্টের জন্য ইন্সট্রুমেন্টেড পরীক্ষা চালান বা এর ম্যানিফেস্ট সেটিংস ওভাররাইড করুন।
  • বিল্ড টাইপ পরিবর্তন করুন যা আপনার পরীক্ষাগুলির বিরুদ্ধে চলে বা এর গ্রেডল বিকল্পগুলি কনফিগার করুন।
  • আপনার যন্ত্রযুক্ত পরীক্ষাগুলিকে তাদের নিজস্ব পরীক্ষা মডিউলে বের করুন।
  • আপনার ক্রমাগত ইন্টিগ্রেশন সেটআপের অংশ হিসাবে আরও উন্নত পরীক্ষা সম্পাদন করুন।

এই পৃষ্ঠাটি আপনার পরীক্ষাগুলি কনফিগার করার বিভিন্ন উপায় বর্ণনা করে যখন ডিফল্ট সেটিংস আপনার প্রয়োজনের সাথে খাপ খায় না৷

একটি বিল্ড ভেরিয়েন্টের জন্য একটি যন্ত্রযুক্ত পরীক্ষা তৈরি করুন

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

একটি বিল্ড ভেরিয়েন্টের সাথে ইনস্ট্রুমেন্টেড টেস্টগুলি লিঙ্ক করতে, সেগুলিকে তাদের নিজস্ব সোর্স সেটে রাখুন, src/androidTest VariantName এ অবস্থিত।

src/androidTest/ সোর্স সেটে ইন্সট্রুমেন্টেড পরীক্ষাগুলি সমস্ত বিল্ড ভেরিয়েন্ট দ্বারা ভাগ করা হয়। আপনার অ্যাপের "MyFlavor" ভেরিয়েন্টের জন্য একটি টেস্ট APK তৈরি করার সময়, Gradle src/androidTest/ এবং src/androidTestMyFlavor/ উৎস সেটগুলিকে একত্রিত করে।

অ্যান্ড্রয়েড স্টুডিওতে আপনার বিল্ড ভেরিয়েন্টের জন্য একটি টেস্টিং সোর্স সেট যোগ করতে, এই ধাপগুলি অনুসরণ করুন:

  1. প্রজেক্ট উইন্ডোতে, মেনুতে ক্লিক করুন এবং প্রজেক্ট ভিউ নির্বাচন করুন।
  2. উপযুক্ত মডিউল ফোল্ডারের মধ্যে, src ফোল্ডারে ডান-ক্লিক করুন এবং নতুন > ডিরেক্টরিতে ক্লিক করুন।
  3. ডিরেক্টরি নামের জন্য, "androidTest VariantName " লিখুন। উদাহরণস্বরূপ, আপনার যদি "MyFlavor" নামে একটি বিল্ড ভেরিয়েন্ট থাকে, তাহলে androidTestMyFlavor ডিরেক্টরি নামটি ব্যবহার করুন।
  4. ওকে ক্লিক করুন।
  5. নতুন ডিরেক্টরিতে ডান-ক্লিক করুন এবং নতুন > ডিরেক্টরি নির্বাচন করুন।
  6. ডিরেক্টরির নাম হিসাবে "java" লিখুন, তারপর ওকে ক্লিক করুন।

এখন আপনি একটি নতুন পরীক্ষা যোগ করার পদক্ষেপগুলি অনুসরণ করে এই নতুন উত্স সেটে পরীক্ষা যোগ করতে পারেন৷ যখন আপনি গন্তব্য ডিরেক্টরি নির্বাচন করুন ডায়ালগে পৌঁছাবেন, নতুন বৈকল্পিক পরীক্ষার উত্স সেটটি নির্বাচন করুন৷

নিম্নলিখিত সারণীটি একটি উদাহরণ দেখায় যে কীভাবে ইন্সট্রুমেন্টেশন টেস্ট ফাইলগুলি সোর্স সেটগুলিতে থাকতে পারে যা অ্যাপের কোড সোর্স সেটগুলির সাথে মিলে যায়:

সারণী 1. অ্যাপ সোর্স কোড এবং সংশ্লিষ্ট যন্ত্র পরীক্ষার ফাইল

অ্যাপ ক্লাসের পথ ম্যাচিং ইন্সট্রুমেন্টেশন পরীক্ষার ক্লাসের পথ
src/main/java/Example.java src/androidTest/java/AndroidExampleTest.java
src/myFlavor/java/Example.java src/androidTestMyFlavor/java/AndroidExampleTest.java

ঠিক যেমন এটি আপনার অ্যাপ সোর্স সেটের জন্য করে, গ্রেডল বিল্ড বিভিন্ন টেস্ট সোর্স সেট থেকে ফাইলগুলিকে একত্রিত করে এবং ওভাররাইড করে। এই ক্ষেত্রে, androidTestMyFlavor সোর্স সেটের AndroidExampleTest.java ফাইলটি androidTest সোর্স সেটের সংস্করণটিকে ওভাররাইড করে। এর কারণ হল প্রোডাক্ট ফ্লেভার সোর্স সেটের প্রধান সোর্স সেটের উপর অগ্রাধিকার রয়েছে।

আপনি যখন বিল্ড ভেরিয়েন্ট সিলেক্টরে বিভিন্ন স্বাদ নির্বাচন করেন, তখন ব্যবহার করা ফোল্ডারগুলিকে দেখানোর জন্য উপযুক্ত androidTest ফোল্ডারগুলি Android ভিউতে প্রদর্শিত হয়:

MyFlavor ভেরিয়েন্ট নির্বাচিত এবং androidTestMyFlavor ফোল্ডারটি Android ভিউতে দেখানো হয়েছে
চিত্র 1. MyFlavor ভেরিয়েন্ট নির্বাচিত; androidTestMyFlavor ফোল্ডারটি Android ভিউতে প্রদর্শিত হয়।

যখন একটি ভিন্ন রূপ নির্বাচন করা হয় তখন androidTestMyFlavor ফোল্ডারটি দেখানো হয় না:

OtherFlavor ভেরিয়েন্ট নির্বাচিত এবং androidTestMyFlavor ফোল্ডারটি Android ভিউতে দেখানো হয়নি
চিত্র 2. OtherFlavor বৈকল্পিক নির্বাচিত; androidTestMyFlavor ফোল্ডারটি Android ভিউতে দেখায় না।

আপনি যদি প্রজেক্ট ভিউ ব্যবহার করেন তবে এটি কিছুটা আলাদা দেখায়, তবে একই নীতি প্রযোজ্য:

MyFlavor ভেরিয়েন্ট নির্বাচন করা হয়েছে এবং androidTestMyFlavor ফোল্ডারটি প্রোজেক্ট ভিউতে সক্রিয় আছে
চিত্র 3. MyFlavor ভেরিয়েন্ট নির্বাচিত; androidTestMyFlavor ফোল্ডারটি প্রজেক্ট ভিউতে সক্রিয়।

যখন একটি ভিন্ন রূপ নির্বাচন করা হয়, তখন androidTestMyFlavor ফোল্ডারটি এখনও দৃশ্যমান, কিন্তু এটি সক্রিয় হিসাবে দেখানো হয় না:

OtherFlavor ভেরিয়েন্ট নির্বাচিত এবং androidTestMyFlavor ফোল্ডারটি প্রোজেক্ট ভিউতে সক্রিয় নেই
চিত্র 4. OtherFlavor বৈকল্পিক নির্বাচিত; androidTestMyFlavor ফোল্ডারটি প্রজেক্ট ভিউতে সক্রিয় নয়।

উত্স সেটগুলি কীভাবে একত্রিত হয় সে সম্পর্কে আরও তথ্যের জন্য, উত্স সেটগুলি দেখুন৷

ইন্সট্রুমেন্টেশন ম্যানিফেস্ট সেটিংস কনফিগার করুন

ইন্সট্রুমেন্টেড টেস্টগুলি একটি আলাদা APK-তে তৈরি করা হয় যার নিজস্ব AndroidManifest.xml ফাইল রয়েছে৷ যখন Gradle আপনার পরীক্ষার APK তৈরি করে, তখন এটি স্বয়ংক্রিয়ভাবে AndroidManifest.xml ফাইল তৈরি করে এবং <instrumentation> নোডের সাথে কনফিগার করে। Gradle আপনার জন্য এই নোডটি কনফিগার করার একটি কারণ হল targetPackage প্রপার্টি পরীক্ষার অধীনে অ্যাপটির সঠিক প্যাকেজ নাম নির্দিষ্ট করে তা নিশ্চিত করা।

এই নোডের জন্য অন্যান্য সেটিংস পরিবর্তন করতে, হয় পরীক্ষার উত্স সেটে অন্য একটি ম্যানিফেস্ট ফাইল তৈরি করুন বা আপনার মডিউল-স্তরের build.gradle ফাইলটি কনফিগার করুন, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে। BaseFlavor এপিআই রেফারেন্সে বিকল্পগুলির সম্পূর্ণ তালিকা পাওয়া যাবে।

গ্রোভি

android {
    ...
    defaultConfig {
        ...
        testApplicationId "com.example.test"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testHandleProfiling true
        testFunctionalTest true
    }
}

কোটলিন

android {
    ...
    defaultConfig {
        ...
        testApplicationId = "com.example.test"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        testHandleProfiling = true
        testFunctionalTest = true
    }
}

Each product flavor you configure can override properties in the defaultConfig {} block. To learn more, go to Configure product flavors.

The properties in the snippet are:

Setting Description
testApplicationId Specifies the application ID for the test APK.
testInstrumentationRunner Specifies the fully qualified class name of the test instrumentation runner.
testHandleProfiling If set to true, enables the instrumentation class to start and stop profiling.
If set to false, profiling occurs the entire time the instrumentation class is running.
testFunctionalTest If set to true, indicates that the Android system should run the instrumentation class as a functional test.
The default value is false.

Change the test build type

By default, all instrumentation tests run against the debug build type. You can change this to another build type by using the testBuildType property in your module-level build.gradle file. For example, if you want to run your tests against your staging build type, edit the file as shown in the following snippet:

Groovy

android {
    ...
    testBuildType "staging"
}

কোটলিন

android {
    ...
    testBuildType = "staging"
}

Gradle পরীক্ষার বিকল্পগুলি কনফিগার করুন

অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনাকে আপনার সমস্ত বা শুধুমাত্র কিছু পরীক্ষার জন্য নির্দিষ্ট বিকল্পগুলি নির্দিষ্ট করতে দেয়। মডিউল-স্তরের build.gradle ফাইলে, আপনার সমস্ত পরীক্ষা কীভাবে Gradle চালায় তা পরিবর্তন করে এমন বিকল্পগুলি নির্দিষ্ট করতে testOptions ব্লক ব্যবহার করুন:

গ্রোভি

android {
    ...
    // Encapsulates options for running tests.
    testOptions {
        reportDir "$rootDir/test-reports"
        resultsDir "$rootDir/test-results"
    }
}

কোটলিন

android {
    ...
    // Encapsulates options for running tests.
    testOptions {
        reportDir "$rootDir/test-reports"
        resultsDir = "$rootDir/test-results"
    }
}

reportDir প্রপার্টি ডাইরেক্টরি পরিবর্তন করে যেখানে গ্রেডল পরীক্ষার রিপোর্ট সংরক্ষণ করে। ডিফল্টরূপে, Gradle path_to_your_project / module_name /build/outputs/reports/ ডিরেক্টরিতে পরীক্ষার রিপোর্ট সংরক্ষণ করে। $rootDir বর্তমান প্রকল্পের রুট ডিরেক্টরির সাথে সম্পর্কিত পাথ সেট করে।

resultsDir বৈশিষ্ট্য ডিরেক্টরিটি পরিবর্তন করে যেখানে গ্রেডল পরীক্ষার ফলাফল সংরক্ষণ করে। ডিফল্টরূপে, Gradle path_to_your_project / module_name /build/outputs/test-results/ ডিরেক্টরিতে পরীক্ষার ফলাফল সংরক্ষণ করে। $rootDir বর্তমান প্রকল্পের রুট ডিরেক্টরির সাথে সম্পর্কিত পাথ সেট করে।

শুধুমাত্র স্থানীয় ইউনিট পরীক্ষার জন্য বিকল্পগুলি নির্দিষ্ট করতে, testOptions ভিতরে unitTests ব্লক কনফিগার করুন।

গ্রোভি

android {
    ...
    testOptions {
        ...
        // Encapsulates options for local unit tests.
        unitTests {
            returnDefaultValues true

            all {
                jvmArgs '-XX:MaxPermSize=256m'

                if (it.name == 'testDebugUnitTest') {
                    systemProperty 'debug', 'true'
                }
                ...
            }
        }
    }
}

কোটলিন

android {
    ...
    testOptions {
        ...
        // Encapsulates options for local unit tests.
        unitTests {
            returnDefaultValues = true

            all {
                jvmArgs = listOf("-XX:MaxPermSize=256m")

                 if (it.name == "testDebugUnitTest") {
                    systemProperty = mapOf("debug" to "true")
                }
                ...
            }
        }
    }
}

ডিফল্টরূপে, আপনি যে কোডটি পরীক্ষা করছেন সেটি অ্যান্ড্রয়েড প্ল্যাটফর্ম এপিআই অ্যাক্সেস করার চেষ্টা করার সময় স্থানীয় ইউনিট পরীক্ষাগুলি একটি ব্যতিক্রম ছুঁড়ে দেয়, যদি না আপনি নিজেই অ্যান্ড্রয়েড নির্ভরতাকে উপহাস করেন বা মকিটোর মতো একটি টেস্টিং ফ্রেমওয়ার্ক দিয়ে থাকেন। যাইহোক, আপনি returnDefaultValues ​​প্রপার্টি সক্ষম করতে পারেন যাতে প্ল্যাটফর্ম এপিআই অ্যাক্সেস করার সময় পরীক্ষাটি শূন্য বা শূন্য রিটার্ন করে, ব্যতিক্রম না করে।

গ্র্যাডল কীভাবে স্থানীয় ইউনিট পরীক্ষা চালায় তা নিয়ন্ত্রণ করার জন্য all ব্লক বিকল্পগুলিকে এনক্যাপসুলেট করে। আপনি নির্দিষ্ট করতে পারেন এমন সমস্ত বিকল্পগুলির একটি তালিকার জন্য, Gradle এর রেফারেন্স ডকুমেন্টেশন পড়ুন।

jvmArgs বৈশিষ্ট্য JVM (গুলি) পরীক্ষার জন্য JVM আর্গুমেন্ট সেট করে।

আপনি শুধুমাত্র আপনার নির্দিষ্ট করা পরীক্ষাগুলিতে বিকল্পগুলি প্রয়োগ করতে টাস্কের নামটিও পরীক্ষা করতে পারেন। উদাহরণের স্নিপেটে, debug বৈশিষ্ট্যটি true হিসাবে সেট করা হয়েছে তবে শুধুমাত্র testDebugUnitTest টাস্কের জন্য।

যন্ত্রযুক্ত পরীক্ষার জন্য পৃথক পরীক্ষা মডিউল ব্যবহার করুন

আপনি যদি ইন্সট্রুমেন্টেড টেস্টের জন্য একটি ডেডিকেটেড মডিউল পেতে চান, আপনার টেস্ট থেকে আপনার বাকি কোড আলাদা করতে, একটি আলাদা টেস্ট মডিউল তৈরি করুন এবং একটি লাইব্রেরি মডিউলের মতো এর বিল্ড কনফিগার করুন।

একটি পরীক্ষা মডিউল তৈরি করতে, নিম্নলিখিত হিসাবে এগিয়ে যান:

  1. একটি লাইব্রেরি মডিউল তৈরি করুন
  2. মডিউল-স্তরের build.gradle ফাইলে, com.android.library এর পরিবর্তে com.android.test প্লাগইন প্রয়োগ করুন।
  3. সিঙ্ক প্রজেক্টে ক্লিক করুন .

আপনি আপনার পরীক্ষার মডিউল তৈরি করার পরে, আপনি আপনার পরীক্ষার কোডটি প্রধান বা বৈকল্পিক উত্স সেটে অন্তর্ভুক্ত করতে পারেন (উদাহরণস্বরূপ, src/main/java বা src/ variant /java )। যদি আপনার অ্যাপ মডিউল একাধিক পণ্যের স্বাদকে সংজ্ঞায়িত করে, আপনি আপনার পরীক্ষা মডিউলে সেই স্বাদগুলি পুনরায় তৈরি করতে পারেন। বৈকল্পিক-সচেতন নির্ভরতা ব্যবস্থাপনা ব্যবহার করে, পরীক্ষা মডিউল লক্ষ্য মডিউলে মিলিত স্বাদ পরীক্ষা করার চেষ্টা করে।

ডিফল্টরূপে, টেস্ট মডিউলে শুধুমাত্র একটি ডিবাগ বৈকল্পিক থাকে এবং পরীক্ষা করে। যাইহোক, আপনি পরীক্ষিত অ্যাপ প্রকল্পের সাথে মেলে নতুন বিল্ড প্রকার তৈরি করতে পারেন। পরীক্ষা মডিউল পরীক্ষা করার জন্য একটি ভিন্ন বিল্ড টাইপ পরীক্ষা করুন এবং ডিবাগ নয়, পরীক্ষা প্রকল্পে ডিবাগ বৈকল্পিক নিষ্ক্রিয় করতে VariantFilter ব্যবহার করুন, যেমন দেখানো হয়েছে:

গ্রোভি

android {
    variantFilter { variant ->
        if (variant.buildType.name.equals('debug')) {
            variant.setIgnore(true);
        }
    }
}

কোটলিন

android {
    variantFilter {
        if (buildType.name == "debug") {
            ignore = true
        }
    }
}

আপনি যদি একটি পরীক্ষা মডিউল শুধুমাত্র নির্দিষ্ট ফ্লেভারগুলিকে লক্ষ্য করতে চান বা একটি অ্যাপের প্রকার তৈরি করতে চান, তাহলে আপনি শুধুমাত্র যে বৈকল্পিকগুলি পরীক্ষা করতে চান তা লক্ষ্য করার জন্য matchingFallbacks সম্পত্তি ব্যবহার করতে পারেন৷ এটি পরীক্ষার মডিউলটিকে নিজের জন্য এই রূপগুলি কনফিগার করতে বাধা দেয়।