গুগল কালো সম্প্রদায়ের জন্য জাতিগত সমতা উন্নয়নে প্রতিশ্রুতিবদ্ধ। দেখ কিভাবে.
This page was translated by the Cloud Translation API.
Switch to English

একটি প্রয়োগ উদাহরণ লক্ষ্য

এই বিভাগের উপকরণ পরীক্ষা নিয়মিত অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিকে লক্ষ্য করে তুলনামূলক তুলনায় আলাদা নয়। এটি লক্ষণীয় যে পরীক্ষামূলক অ্যাপ্লিকেশনটিতে যা উপকরণ অন্তর্ভুক্ত রয়েছে সেই অ্যাপ্লিকেশনটিকে এটি লক্ষ্যবস্তু করার মতো একই শংসাপত্রের সাথে স্বাক্ষর করা দরকার।

নোট করুন যে এই গাইডটিকে ধরে নেওয়া হয়েছে যে প্ল্যাটফর্ম উত্স গাছের কর্মপ্রবাহে আপনার ইতিমধ্যে কিছু জ্ঞান রয়েছে। যদি তা না হয় তবে দয়া করে https://source.android.com/source/requirements দেখুন। এখানে আচ্ছাদিত উদাহরণটি তার নিজস্ব পরীক্ষা অ্যাপ্লিকেশন প্যাকেজে লক্ষ্য প্যাকেজ সেট সহ একটি নতুন উপকরণ পরীক্ষা লিখছে। আপনি যদি ধারণাটির সাথে অপরিচিত হন তবে দয়া করে প্ল্যাটফর্ম পরীক্ষার ভূমিকাটি পড়ুন

এই গাইডটি নমুনা হিসাবে পরিবেশন করতে নিম্নলিখিত পরীক্ষাটি ব্যবহার করে:

  • অবকাঠামো / বেস / প্যাকেজ / শেল / পরীক্ষার

এগিয়ে যাওয়ার আগে মোটামুটি ছাপ পেতে প্রথমে কোডটি ব্রাউজ করার পরামর্শ দেওয়া হয়।

একটি উত্স অবস্থান সিদ্ধান্ত

যেহেতু উপকরণ পরীক্ষা কোনও অ্যাপ্লিকেশনকে লক্ষ্যবস্তু করবে, কনভেনশনটি আপনার উপাদান উত্স ডিরেক্টরিটির প্ল্যাটফর্ম উত্স ট্রিতে একটি tests ডিরেক্টরিতে টেস্ট উত্স কোড স্থাপন করবে।

স্ব-সরঞ্জাম পরীক্ষার জন্য শেষ থেকে শেষ উদাহরণে উত্সের অবস্থান সম্পর্কে আরও আলোচনা দেখুন।

ম্যানিফেস্ট ফাইল

ঠিক একটি নিয়মিত প্রয়োগের মতো, প্রতিটি উপকরণ পরীক্ষার মডিউলটির একটি ম্যানিফেস্ট ফাইল প্রয়োজন। আপনি ফাইলের নাম যদি AndroidManifest.xml এবং পরবর্তী প্রদান Android.mk আপনার পরীক্ষার tmodule জন্য, এটি দ্বারা স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হবে BUILD_PACKAGE কোর Makefile।

আরও এগিয়ে যাওয়ার আগে, প্রথমে অ্যাপ ম্যানিফেস্ট ওভারভিউ দিয়ে যাওয়ার জন্য এটি সুপারিশ করা হয়।

এটি ম্যানিফেস্ট ফাইলের মূল উপাদানগুলির সংক্ষিপ্তসার এবং তাদের কার্যকারিতা দেয়।

নমুনা জীবাণু পরিবর্তনের জন্য ম্যানিফেস্ট ফাইলের সর্বশেষ সংস্করণটি এখানে অ্যাক্সেস করা যায়: https://android.googlesource.com/platform/frameworks/base/+/master/packages/Shell/tests/AndroidManLive.xml

সুবিধার জন্য এখানে একটি স্ন্যাপশট অন্তর্ভুক্ত করা হয়েছে:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.shell.tests">

    <application>
        <uses-library android:name="android.test.runner" />

        <activity
            android:name="com.android.shell.ActionSendMultipleConsumerActivity"
            android:label="ActionSendMultipleConsumer"
            android:theme="@android:style/Theme.NoDisplay"
            android:noHistory="true"
            android:excludeFromRecents="true">
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
            </intent-filter>
        </activity>
    </application>

    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
        android:targetPackage="com.android.shell"
        android:label="Tests for Shell" />

</manifest>
 

কিছু প্রকাশিত ফাইলটিতে মন্তব্য নির্বাচন করুন:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.shell.tests">
 

package বৈশিষ্ট্যটি হ'ল অ্যাপ্লিকেশন প্যাকেজের নাম: এটি অনন্য সনাক্তকারী যা অ্যান্ড্রয়েড অ্যাপ্লিকেশন ফ্রেমওয়ার্কটি কোনও অ্যাপ্লিকেশন সনাক্ত করতে ব্যবহার করে (বা এই প্রসঙ্গে: আপনার পরীক্ষার অ্যাপ্লিকেশন)। সিস্টেমের প্রতিটি ব্যবহারকারী সেই প্যাকেজের নামের সাথে একটি অ্যাপ্লিকেশন ইনস্টল করতে পারে।

যেহেতু এটি একটি পরীক্ষা অ্যাপ্লিকেশন প্যাকেজ, যা পরীক্ষার অধীনে অ্যাপ্লিকেশন প্যাকেজ থেকে পৃথক, আলাদা প্যাকেজের নাম অবশ্যই ব্যবহার করা উচিত: একটি সাধারণ কনভেনশন হ'ল প্রত্যয় যোগ করা .test

উপরন্তু, এই package অ্যাট্রিবিউট কি হিসাবে একই ComponentName#getPackageName() আয়, এবং এছাড়াও একই আপনি বিভিন্ন সাথে যোগাযোগ করার জন্য ব্যবহার করেন pm মাধ্যমে সাব কমান্ড adb shell

দয়া করে নোট করুন যে প্যাকেজের নামটি সাধারণত জাভা প্যাকেজের নাম হিসাবে একই স্টাইলে থাকে তবে এটির সাথে এটি করার খুব কম জিনিস রয়েছে। অন্য কথায়, আপনার অ্যাপ্লিকেশন (বা পরীক্ষা) প্যাকেজটিতে কোনও প্যাকেজ নাম সহ ক্লাস থাকতে পারে, অন্যদিকে, আপনি সরলতার পক্ষে বেছে নিতে পারেন এবং আপনার অ্যাপ্লিকেশনটিতে আপনার শীর্ষ স্তরের জাভা প্যাকেজটির নাম রাখতে পারেন বা অ্যাপ্লিকেশন প্যাকেজের নামের মতো পরীক্ষা করতে পারেন।

 <uses-library android:name="android.test.runner" />
 

এটি সমস্ত ইনস্ট্রুমেন্টেশন পরীক্ষার জন্য প্রয়োজনীয়, যেহেতু সম্পর্কিত ক্লাসগুলি পৃথক ফ্রেমওয়ার্ক জার লাইব্রেরি ফাইলে প্যাকেজ করা থাকে, সুতরাং পরীক্ষার প্যাকেজ অ্যাপ্লিকেশন কাঠামোর দ্বারা প্রবর্তন করা হলে অতিরিক্ত শ্রেণিপথ প্রবেশের প্রয়োজন হয়।

 android:targetPackage="com.android.shell"
 

এটি উপকরণের লক্ষ্য প্যাকেজটি com.android.shell.tests এ সেট করে। যখন ইনস্ট্রুমেন্টেশনটি am instrument কমান্ডের মাধ্যমে আহ্বান করা হয় তখন ফ্রেমওয়ার্কটি com.android.shell.tests প্রক্রিয়াটি পুনরায় আরম্ভ করে এবং পরীক্ষামূলক প্রয়োগের জন্য উপকরণ কোডটি ইনজেক্ট করে। এর অর্থ হ'ল পরীক্ষার কোডটি পরীক্ষার অধীনে প্রয়োগ থাকা সমস্ত শ্রেণীর দৃষ্টান্তগুলিতে অ্যাক্সেস পাবে এবং পরীক্ষার হুকের উদ্ভাসনের উপর নির্ভর করে রাষ্ট্রকে সামাল দিতে সক্ষম হতে পারে।

সাধারণ কনফিগারেশন ফাইল

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

জটিল কনফিগারেশন ফাইল

আরও জটিল পরীক্ষার জন্য, আপনাকে অ্যান্ড্রয়েডের পরীক্ষার জোতা, ট্রেড ফেডারেশনের জন্য একটি পরীক্ষা কনফিগারেশন ফাইলও লিখতে হবে।

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

নমুনা জীবাণু পরিবর্তনের জন্য কনফিগার ফাইলের সর্বশেষ সংস্করণটি এখানে প্রবেশ করা যেতে পারে: ফ্রেমওয়ার্ক / বেস / প্যাকেজস / শেল / পরীক্ষা / অ্যান্ড্রয়েড টেস্ট.এক্সএমএল

সুবিধার জন্য এখানে একটি স্ন্যাপশট অন্তর্ভুক্ত করা হয়েছে:

 <configuration description="Runs Tests for Shell.">
    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
        <option name="test-file-name" value="ShellTests.apk" />
    </target_preparer>

    <option name="test-suite-tag" value="apct" />
    <option name="test-tag" value="ShellTests" />
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="com.android.shell.tests" />
        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
    </test>
</configuration>
 

কিছু পরীক্ষা কনফিগারেশন ফাইলটিতে মন্তব্য নির্বাচন করুন:

 <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
  <option name="test-file-name" value="ShellTests.apk"/>
</target_preparer>
 

এটি ট্রেড ফেডারেশনকে একটি নির্দিষ্ট টার্গেট_প্রিপারার ব্যবহার করে লক্ষ্য ডিভাইসে শেল টেস্ট.এপকে ইনস্টল করতে বলে। ট্রেড ফেডারেশনে বিকাশকারীদের জন্য অনেক লক্ষ্য প্রস্তুতকারক রয়েছে এবং এগুলি পরীক্ষার কার্যকর করার আগে ডিভাইসটি সঠিকভাবে সেটআপ করা হয়েছে তা নিশ্চিত করতে ব্যবহার করা যেতে পারে।

 <test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="com.android.shell.tests"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>
 

এটি পরীক্ষাটি কার্যকর করতে ব্যবহার করার জন্য ট্রেড ফেডারেশন পরীক্ষার শ্রেণি নির্দিষ্ট করে এবং মৃত্যুদন্ড কার্যকর করার জন্য ডিভাইসে থাকা প্যাকেজে পাস এবং পরীক্ষার রানার কাঠামো যা এই ক্ষেত্রে JUnit।

টেস্ট মডিউল কনফিগ সম্পর্কিত আরও তথ্যের জন্য এখানে দেখুন

JUnit4 বৈশিষ্ট্য

পরীক্ষার রানার হিসাবে android-support-test লাইব্রেরিটি নতুন JUnit4 শৈলীর পরীক্ষা ক্লাস গ্রহণ করতে সক্ষম করে, এবং নমুনা জীবাণু পরিবর্তনতে এর বৈশিষ্ট্যগুলির কিছু খুব প্রাথমিক ব্যবহার রয়েছে।

নমুনা জীবাণু পরিবর্তনের জন্য সর্বশেষ উত্স কোডটি এখানে প্রবেশ করা যেতে পারে: ফ্রেমওয়ার্ক / বেস / প্যাকেজস / শেল / টেস্টস / এসসিআর / কম / অ্যান্ড্রয়েড / শেল / বাগেরপোর্টরিসিভারটেষ্ট.জভা

পরীক্ষার ধরণগুলি সাধারণত উপাদান দলগুলির সাথে সুনির্দিষ্ট থাকে তবে কিছু কার্যকর ব্যবহারের ধরণ থাকে।

 @SmallTest
@RunWith(AndroidJUnit4.class)
public final class FeatureFactoryImplTest {
 

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

@SmallTest টীকাটি সম্পূর্ণ পরীক্ষার শ্রেণীর জন্য একটি পরীক্ষার আকার নির্দিষ্ট করেছে: এই পরীক্ষার শ্রেণিতে যুক্ত সমস্ত পরীক্ষার পদ্ধতিগুলি এই পরীক্ষার আকারের টিকা বিশিষ্ট হয়। প্রাক পরীক্ষার ক্লাস সেটআপ, পোস্ট টেস্ট টিয়ার ডাউন এবং পোস্ট টেস্ট ক্লাস টিয়ার ডাউন: setUp এবং tearDown পদ্ধতির মতো। প্রকৃত পরীক্ষার টীকা দেওয়ার জন্য Test টীকা ব্যবহার করা হয়।

     @Before
    public void setup() {
    ...
    @Test
    public void testGetProvider_shouldCacheProvider() {
    ...
 

@Before টীকা প্রাক পরীক্ষা সেটআপ সম্পাদন করতে JUnit4 দ্বারা পদ্ধতি উপর ব্যবহার করা হয়। যদিও এই উদাহরণে ব্যবহার না করা হলেও পোস্ট @After টিয়ারডাউনয়ের জন্য @After । একইভাবে, @BeforeClass এবং @AfterClass টীকাগুলি পরীক্ষার ক্লাসে সমস্ত পরীক্ষা চালানোর আগে সেটআপ সঞ্চালনের জন্য JUnit4 দ্বারা পদ্ধতিগুলিতে ব্যবহার করা যেতে পারে, এবং তারপরে টিয়ারডাউন করা যেতে পারে। নোট করুন যে শ্রেণি-স্কোপ সেটআপ এবং টিয়ারডাউন পদ্ধতিগুলি অবশ্যই স্থির থাকতে হবে।

পরীক্ষার পদ্ধতিগুলির হিসাবে, JUnit এর পূর্ববর্তী সংস্করণের বিপরীতে, তাদের আর পদ্ধতিটির নাম test দিয়ে শুরু করার দরকার নেই, পরিবর্তে, তাদের প্রত্যেককে অবশ্যই @Test দিয়ে @Test । যথারীতি, পরীক্ষার পদ্ধতিগুলি অবশ্যই সর্বজনীন হতে হবে, কোনও ফেরতের মান ঘোষণা করবে না, কোনও পরামিতি নেবে না এবং ব্যতিক্রম ছুঁড়ে ফেলতে পারে।

         Context context = InstrumentationRegistry.getTargetContext();
 

যেহেতু JUnit4 পরীক্ষাগুলির জন্য এখন আর সাধারণ বেস শ্রেণির প্রয়োজন হয় না, getContext() বা getTargetContext() মাধ্যমে বেস শ্রেণীর পদ্ধতির মাধ্যমে Context উদাহরণগুলি পাওয়ার প্রয়োজন নেই; পরিবর্তে, নতুন পরীক্ষা রানার তাদের InstrumentationRegistry রিজিস্টির মাধ্যমে পরিচালনা করে যেখানে উপকরণ কাঠামোর দ্বারা তৈরি প্রাসঙ্গিক এবং পরিবেশগত সেটআপ সংরক্ষণ করা হয়। এই শ্রেণীর মাধ্যমে আপনি কল করতে পারেন:

  • getInstrumentation() : Instrumentation ক্লাসে উদাহরণ
  • getArguments() : কমান্ড লাইন আর্গুমেন্টগুলি -e <key> <value> মাধ্যমে পাঠানো হয়েছে am instrument

স্থানীয়ভাবে তৈরি এবং পরীক্ষা করুন

সর্বাধিক ব্যবহারের ক্ষেত্রে আটেস্ট নিয়োগ করুন

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