স্ব-যন্ত্র পরীক্ষা উদাহরণ

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

এর মানে হল যে একটি যন্ত্র পরীক্ষাটি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক, যেমন সিস্টেম সার্ভারে, এক্সিকিউশনের জন্য নিজেকে ইনজেক্ট করতে পারে না। অর্ডার অ্যান্ড্রয়েড ফ্রেমওয়ার্ক পরীক্ষণের জন্য, পরীক্ষা কোড শুধুমাত্র পাবলিক এপিআই পৃষ্ঠতলের ডাকা, অথবা মাধ্যমে অ্যান্ড্রয়েড ইন্টারফেস সংজ্ঞা ভাষা উন্মুক্ত ঐ পারেন AIDL প্ল্যাটফর্ম উৎস গাছ পাওয়া যায়। এই বিভাগের পরীক্ষার জন্য, কোন বিশেষ প্যাকেজকে লক্ষ্য করা অর্থপূর্ণ নয়। অতএব, এই ধরনের instrumentations জন্য এটা গতানুগতিক নিজস্ব সংজ্ঞায়িত নিজস্ব পরীক্ষা আবেদন প্যাকেজ লক্ষ্য ঘোষণা করা হবে <manifest> এর ট্যাগ AndroidManifest.xml

প্রয়োজনীয়তার উপর নির্ভর করে, এই বিভাগে পরীক্ষার অ্যাপ্লিকেশন প্যাকেজগুলিও হতে পারে:

  • পরীক্ষার জন্য প্রয়োজনীয় বান্ডেল কার্যক্রম।
  • সিস্টেমের সাথে ইউজার আইডি শেয়ার করুন।
  • প্ল্যাটফর্ম কী দিয়ে স্বাক্ষর করুন।
  • পাবলিক SDK এর পরিবর্তে ফ্রেমওয়ার্ক সোর্সের বিরুদ্ধে কম্পাইল করা।

এই শ্রেণীর যন্ত্র পরীক্ষা কখনও কখনও স্ব-যন্ত্র হিসাবে উল্লেখ করা হয়। প্ল্যাটফর্ম উৎসে স্ব-যন্ত্র পরীক্ষার কিছু উদাহরণ এখানে দেওয়া হল:

এখানে আচ্ছাদিত উদাহরণটি তার নিজস্ব পরীক্ষা অ্যাপ্লিকেশন প্যাকেজে লক্ষ্য প্যাকেজ সেট সহ একটি নতুন যন্ত্র পরীক্ষা লিখছে। এই নির্দেশিকা একটি উদাহরণ হিসাবে পরিবেশন করার জন্য নিম্নলিখিত পরীক্ষা ব্যবহার করে:

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

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

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

আপনার উপাদান উৎসের জন্য রুট অবস্থান ধরে নেওয়া যাক এ <component source root> , সবচেয়ে উপাদান আছে src এবং tests যেমন নীচে ফোল্ডার, এবং কিছু অতিরিক্ত ফাইল Android.mk (অথবা অতিরিক্ত বিভক্ত .mk ফাইল), ম্যানিফেস্ট ফাইল AndroidManifest.xml এবং পরীক্ষার কনফিগারেশন ফাইলটি AndroidTest.xml '।

আপনি একটি ব্র্যান্ড নতুন পরীক্ষা যোগ করা হয় যেহেতু, আপনি সম্ভবত তৈরি করতে হবে tests আপনার উপাদান পাশে ডিরেক্টরির src , এবং কন্টেন্ট সঙ্গে এটিকে পূরণ করুন।

কিছু কিছু ক্ষেত্রে, আপনার দলের অধীনে আরও ডিরেক্টরি স্ট্রাকচার থাকতে পারে tests পৃথক APK গুলি মধ্যে পরীক্ষার বিভিন্ন সংকলনের প্যাকেজ প্রয়োজন কারণে। এবং এই ক্ষেত্রে, আপনি অধীনে একটি নতুন সাব ডিরেক্টরি তৈরি করতে হবে tests

গঠন তথাপি, আপনি পূর্ণ শেষ করব tests ডিরেক্টরি বা কি আছে অনুরূপ ফাইল নব নির্মিত সাব ডিরেক্টরি instrumentation নমুনা Gerrit পরিবর্তন ডিরেক্টরি। নীচের বিভাগগুলি প্রতিটি ফাইলের আরও বিশদে ব্যাখ্যা করবে।

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

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

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

এটি একটি ম্যানিফেস্ট ফাইলের মৌলিক উপাদান এবং তাদের কার্যকারিতাগুলির একটি ওভারভিউ দেয়। এ উদাহরণ দেখুন / যন্ত্রানুষঙ্গের / Andro আইডি platform_testing / পরীক্ষার / উদাহরণস্বরূপ

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="android.test.example.helloworld" >

    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />

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

    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
                     android:targetPackage="android.test.example.helloworld"
                     android:label="Hello World Test"/>

</manifest>

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="android.test.example.helloworld" >

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

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

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

android:sharedUserId="android.uid.system"

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

  • কিছু অনুমতি বা API স্বাক্ষর সুরক্ষিত, যার জন্য একই স্বাক্ষর শংসাপত্র প্রয়োজন
  • কিছু অনুমতি অথবা API গুলি প্রয়োজন system আহ্বানকারী, যা এর সাথে ভাগ করে ব্যবহারকারী আইডি কলিং প্যাকেজ প্রয়োজন ব্যবহারকারী পরিচয় system , যদি কোর প্ল্যাটফর্ম নিজেই থেকে একটি পৃথক প্যাকেজ এর
<uses-library android:name="android.test.runner" />

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

android:targetPackage="android.test.example.helloworld"

আপনি লক্ষ্য করে থাকবেন পারে যে targetPackage এখানে একই ঘোষিত হয় যেমন package অ্যাট্রিবিউট ঘোষণা manifest এই ফাইলের ট্যাগ। হিসাবে উল্লেখ পরীক্ষা মূলসূত্র , যন্ত্রানুষঙ্গের পরীক্ষা এই বিষয়শ্রেণীতে সাধারণত ফ্রেমওয়ার্ক API গুলি পরীক্ষার জন্য উদ্দেশ্যে হয়, তাই এটি খুব অর্থপূর্ণ তাদের একটি নির্দিষ্ট লক্ষ্যবস্তু আবেদন প্যাকেজ আছে এর জন্য অন্যান্য নয়, তারপর নিজেই।

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

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

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

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

পরীক্ষার কনফিগারেশনটি পরীক্ষা ক্লাস সরবরাহ করার জন্য বিশেষ ডিভাইস সেটআপ বিকল্প এবং ডিফল্ট আর্গুমেন্ট নির্দিষ্ট করতে পারে। এ উদাহরণ দেখুন /platform_testing/tests/example/instrumentation/AndroidTest.xml

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

<configuration description="Runs sample instrumentation test.">
  <target_preparer class="com.android.tradefed.targetprep.TestFilePushSetup"/>
  <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
    <option name="test-file-name" value="HelloWorldTests.apk"/>
  </target_preparer>
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"/>
  <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"/>
  <option name="test-suite-tag" value="apct"/>
  <option name="test-tag" value="SampleInstrumentationTest"/>

  <test class="com.android.tradefed.testtype.AndroidJUnitTest">
    <option name="package" value="android.test.example.helloworld"/>
    <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="HelloWorldTests.apk"/>
</target_preparer>

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

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

এটি ট্রেড ফেডারেশনের পরীক্ষার ক্লাস নির্দিষ্ট করে পরীক্ষাটি চালানোর জন্য এবং ডিভাইসে প্যাকেজে পাস করার জন্য এবং পরীক্ষা রানার ফ্রেমওয়ার্ক যা এই ক্ষেত্রে JUnit।

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

JUnit4 বৈশিষ্ট্য

ব্যবহার android-support-test পরীক্ষা রানার হিসাবে গ্রন্থাগার নতুন JUnit4 শৈলী পরীক্ষা ক্লাস গ্রহণ সক্ষম, এবং নমুনা Gerrit পরিবর্তন তার বৈশিষ্ট্য কিছু খুবই সাধারন ব্যবহার রয়েছে। এ উদাহরণ দেখুন /platform_testing/tests/example/instrumentation/src/android/test/example/helloworld/HelloWorldTest.java

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

@RunWith(JUnit4.class)
public class HelloWorldTest {

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

    @BeforeClass
    public static void beforeClass() {
    ...
    @AfterClass
    public static void afterClass() {
    ...
    @Before
    public void before() {
    ...
    @After
    public void after() {
    ...
    @Test
    @SmallTest
    public void testHelloWorld() {
    ...

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

গুরুত্বপূর্ণ: পরীক্ষা পদ্ধতি নিজেদের সঙ্গে সটীক হয় @Test টীকা; এবং মনে রাখবেন পরীক্ষার জন্য APCT মাধ্যমে নিষ্পন্ন করা হবে, তখন তারা পরীক্ষা আকারের সঙ্গে সটীক করা আবশ্যক: উদাহরণস্বরূপ সটীক পদ্ধতি testHelloWorld যেমন @SmallTest । টীকাটি পদ্ধতির পরিধি বা শ্রেণীর সুযোগে প্রয়োগ করা যেতে পারে।

অ্যাক্সেস করা instrumentation

যদিও মৌলিক হ্যালো দুনিয়া উদাহরণে আবৃত নয়, এটি একটি অ্যান্ড্রয়েড পরীক্ষা অ্যাক্সেস প্রয়োজন জন্য মোটামুটি সাধারণ এর Instrumentation উদাহরণস্বরূপ: এই কোর এপিআই ইন্টারফেসের যে আবেদন প্রসঙ্গে কার্যকলাপ জীবনচক্র সম্পর্কিত পরীক্ষা API গুলি এবং আরো অ্যাক্সেস প্রদান করে।

কারণ JUnit4 আর পরীক্ষা একটি সাধারণ বেস বর্গ প্রয়োজন, এটা এখন আর প্রাপ্ত প্রয়োজন Instrumentation মাধ্যমে উদাহরণস্বরূপ InstrumentationTestCase#getInstrumentation() , পরিবর্তে, নতুন পরীক্ষা রানার এটা মাধ্যমে পরিচালনা করে InstrumentationRegistry যেখানে যন্ত্রানুষঙ্গের ফ্রেমওয়ার্ক দ্বারা নির্মিত প্রাসঙ্গিক ও পরিবেশগত সেটআপ সংরক্ষণ করা হয়।

দৃষ্টান্ত অ্যাক্সেস করতে Instrumentation বর্গ, কেবল স্ট্যাটিক পদ্ধতি কল getInstrumentation() উপর InstrumentationRegistry শ্রেণী:

Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation()

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

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

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