একটি অ্যাপ্লিকেশনের উদাহরণ লক্ষ্য করা

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

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

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

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

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

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

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

উৎস অবস্থানটি সম্পর্কে আরো আলোচনা দেখুন স্ব-instrumenting পরীক্ষার জন্য এন্ড-টু-এন্ড উদাহরণ

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

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

আরো অগ্রসর হওয়ার আগে, এটা অত্যন্ত মধ্য দিয়ে যেতে সুপারিশ করা হচ্ছে অ্যাপ ম্যানিফেস্ট সংক্ষিপ্ত বিবরণ প্রথম।

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

নমুনা জেরিট পরিবর্তনের জন্য ম্যানিফেস্ট ফাইলের সর্বশেষ সংস্করণটি এখানে প্রবেশ করা যেতে পারে: https://android.googlesource.com/platform/frameworks/base/+/master/packages/Shell/tests/AndroidManifest.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 । যন্ত্রানুষঙ্গের মাধ্যমে প্রার্থনা করা হলে am instrument কমান্ড কাঠামো পুনরায় আরম্ভ com.android.shell প্রক্রিয়া, এবং পরীক্ষা সঞ্চালনের জন্য প্রক্রিয়ার মধ্যে উদ্বুদ্ধ যন্ত্রানুষঙ্গের কোড। এর অর্থ এইও যে, পরীক্ষার কোডটি পরীক্ষার অধীনে চলমান সমস্ত শ্রেণীর দৃষ্টান্তগুলিতে অ্যাক্সেস পাবে এবং পরীক্ষার হুকগুলি উন্মোচিত হওয়ার উপর নির্ভর করে রাষ্ট্রকে হেরফের করতে সক্ষম হতে পারে।

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

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

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

আরো জটিল পরীক্ষার জন্য, আপনি Android এর পরীক্ষা সাজ জন্য একটি পরীক্ষার কনফিগারেশন ফাইলটি লিখতে প্রয়োজন ট্রেড ফেডারেশন

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

নমুনা Gerrit পরিবর্তনের জন্য কনফিগ ফাইলের সর্বশেষ সংস্করণের এ অ্যাক্সেস করা যেতে পারে: অবকাঠামো / বেস / প্যাকেজ / শেল / পরীক্ষার / AndroidTest.xml

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

<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>

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

<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।

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

JUnit4 বৈশিষ্ট্য

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

নমুনা Gerrit পরিবর্তনের জন্য সর্বশেষ সোর্স কোড থেকে অ্যাক্সেস করা যেতে পারে: অবকাঠামো / বেস / প্যাকেজ / শেল / পরীক্ষার / src / কম / অ্যান্ড্রয়েড / শেল / BugreportReceiverTest.java

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

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

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

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

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

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

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

        Context context = InstrumentationRegistry.getTargetContext();

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

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

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

সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে জন্য চাকরী Atest

অধিক জটিল গুরুতর স্বনির্ধারণ প্রয়োজন ক্ষেত্রেই জন্য, অনুসরণ যন্ত্রানুষঙ্গের নির্দেশাবলী