একটি অ্যান্ড্রয়েড লাইব্রেরী প্রকল্প কীভাবে পরীক্ষা করবেন


97

আমি অ্যান্ড্রয়েড বিটম্যাপ ক্লাসে ভিত্তি করে একটি অ্যান্ড্রয়েড লাইব্রেরি প্রজেক্ট লিখছি (একে এন্ড্রয়েন্ডলিব বলুন) যার মধ্যে কেবল ইউটিলিটি ক্লাস রয়েছে (কোনও ক্রিয়াকলাপ নেই)। আমি এটিকে অ্যান্ড্রয়েড জুনিট ব্যবহার করে পরীক্ষা করার চেষ্টা করেছি, তবে এটি এমন অভিযোগ করে চলেছে যা অ্যানরয়েডলিব.এপকে খুঁজে পায় না

ইউনিট পরীক্ষা অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পের সঠিক উপায় কী?


4
অথবা ( নির্লজ্জ প্লাগ সতর্কতা ) আপনি তৈরি করেছেন এমন একটি প্রকল্প আপনি ব্যবহার করতে পারেন: অ্যান্ড্রয়েড লাইব্রেরি টেস্ট হারনেস (যা আমি "আল্ট এইচ" বলতে চাই)। এটি গিট রেপো হিসাবে উপলব্ধ: gitorious.org/alth প্রকল্পটি এখনও বিকাশে রয়েছে এবং ডকুমেন্টেশনটি কিছুটা বিচ্ছিন্ন তাই আপনার যদি কোনও প্রশ্ন থাকে তবে নির্দ্বিধায় আমাকে আঘাত করতে পারেন।
i41

উত্তর:


75

ডকুমেন্টেশন উদ্ধৃত :

"একটি লাইব্রেরী প্রকল্পে কোড এবং সংস্থানসমূহের উপর পরীক্ষা নিরীক্ষণের দুটি প্রস্তাবিত উপায় রয়েছে:

  • আপনি একটি পরীক্ষা প্রকল্প সেট আপ করতে পারেন যা অ্যাপ্লিকেশন প্রকল্পটি গ্রন্থাগার প্রকল্পের উপর নির্ভর করে instruments তারপরে আপনি লাইব্রেরি-নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য প্রকল্পে পরীক্ষা যুক্ত করতে পারেন।

  • আপনি একটি স্ট্যান্ডার্ড অ্যাপ্লিকেশন প্রকল্প সেট আপ করতে পারেন যা লাইব্রেরির উপর নির্ভর করে এবং সেই প্রকল্পে যন্ত্রটি স্থাপন করতে পারেন। এটি আপনাকে একটি স্ব-অন্তর্ভুক্ত প্রকল্প তৈরি করতে দেয় যা পরীক্ষার / উপকরণ এবং পরীক্ষার কোড উভয়ই রাখে। "


27
সুতরাং মূলত আপনাকে যা করতে হবে তা হ'ল আপনার পরীক্ষা প্রকল্পে লাইব্রেরি যুক্ত করুন এবং পরীক্ষা প্রকল্পটি পরীক্ষা করুন।
njzk2

লিঙ্কটি আর বৈধ নয়, কোনও সুযোগ আপনি আমাদের বর্তমানের দিকে নির্দেশ করতে পারেন?
আব্দুল্লাহ জিবলী


4
এই সুপারিশগুলির সাথে অন্য কারও সাফল্য হয়েছে কিনা তা নিশ্চিত নয় তবে আমি তা করি নি। প্রথমে দ্বিতীয় সমাধানটি চেষ্টা করেছিলাম এবং যখন আমি অ্যালিপসে চালানোর চেষ্টা করি তখন আমি নিম্নলিখিতটি পাই: <ProjectName> একটি android.test.InstrumentationTestRunner উপকরণ নির্দিষ্ট করে না বা তার AndroidManLive.xml এ ব্যবহার-গ্রন্থাগার android.test.runner ঘোষণা করে না। এটি আমি নিজের ইশতেহারে উপকরণ এবং ব্যবহার-গ্রন্থাগার উপাদান উভয়ই যুক্ত করেছি তা সত্ত্বেও এটি।
বেলিংহামার

4
দ্বিতীয়টি পেয়েছেন (এবং কাজ করার পছন্দসই উপায়)। আপনি আপনার ম্যানিফেস্টে সঠিক স্থানে ব্যবহার-গ্রন্থাগার এবং উপকরণের উপাদানগুলি পান এটি অত্যন্ত গুরুত্বপূর্ণ। উপকরণ উপাদানটি মূল ম্যানিফেস্ট এলিমেন্টের একটি শিশু এবং ব্যবহার-গ্রন্থাগার উপাদান অ্যাপ্লিকেশন উপাদানটির একটি শিশু। পরীক্ষাগুলি চালানোর চেষ্টা করার সময় আমি ব্যবহার-গ্রন্থাগারটিকে ম্যানিফেস্ট উপাদানটির নীচে রাখছিলাম এবং উপরের ত্রুটি বার্তাটি দিয়ে শেষ করছি।
বেলিংহামার

17

আপনার পরীক্ষার প্রকল্পে কেবল প্যাকেজের নাম পরিবর্তন করুন যাতে এটি আপনার গ্রন্থাগারের প্যাকেজের সমান হয়। উদাহরণস্বরূপ, আপনার একটি লাইব্রেরি রয়েছে যার প্যাকেজ "com.example.lib"। আপনার লাইব্রেরি লক্ষ্য করে একটি পরীক্ষা প্রকল্প তৈরি করুন। ম্যানিফেস্ট ফাইলটিতে আপনি দেখতে পাবেন package="com.example.lib.test"এবং targetPackage="com.example.lib"। প্যাকেজটি "com.example.lib.test" থেকে "com.example.lib" তে পরিবর্তন করুন ( targetPackageযেমন রয়েছে তেমন ছেড়ে দিন)।

এছাড়াও, নিশ্চিত করুন যে গ্রন্থাগার আপনার পরীক্ষার প্রকল্পে রেফারেন্সড হয় না না জাভা বিল্ড পথে, কিন্তু একটি স্বাভাবিক অ্যান্ড্রয়েড গ্রন্থাগার হিসাবে: অন্ধকার এটা মধ্যে গ্রন্থাগার হিসাবে দেখানো করা আবশ্যক Project->Properties->Androidট্যাব, কিন্তু নাProject->Properties->Java Build Pathট্যাব।

তারপরে আপনার পরীক্ষা চালান।


আপনার ধারণাগুলি আমার কাছে বোধগম্য হয়েছে, যাতে পরীক্ষাটি নিজেই লক্ষ্যবস্তু হয় (অ্যাপ হিসাবে) এবং অ্যাপটি লাইব্রেরির সাথে সংযুক্ত থাকে .... তবে আমি এটি পিপড়া বিল্ড বা ইন্টেলিজের মাধ্যমে কাজ করতে পারি না .... হিসাবে .apk (পরীক্ষার অধীনে থাকা অ্যাপটির জন্য প্রত্যাশিত) এটি ইনস্টল করার চেষ্টা করার সময় উপস্থিত ছিল না, কারণ এটি "টেস্ট / বিন /.- ডিবাগ.এপকে" সংকলিত হচ্ছে
অ্যান্ড্রু ম্যাকেনজি

আমি এটি প্রকাশের টেস্ট প্রকল্পের প্যাকেজের নাম পরিবর্তন করে (এবং পরীক্ষার অধীনে থাকা প্যাকেজটি - যা একই হওয়া উচিত) এটি লাইব্রেরি প্রকল্পের প্যাকেজের নামের সাথে একত্রিত না করে লক্ষ্য পরীক্ষার রেফারেন্সটি সরিয়ে কাজ করে কাজ করতে পেরেছি ant.properties ফাইলে প্রকল্প।
অ্যান্ড্রু ম্যাকেনজি

4
আমি মনে করি এটি গৃহীত প্রশ্নের চেয়ে উত্তম উত্তর, এটি কেবল ডকুমেন্টেশনের প্রতিধ্বনি করে - আইএমএইচও।
অ্যান্ড্রু ম্যাকেনজি


5

ডকুমেন্টেশন প্রতি :

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


কোন কাজ পরীক্ষা চালানো? গ্রেড পরীক্ষা, বা গ্রেড অ্যান্ড্রয়েড টেস্ট? অ্যান্ড্রয়েড টেস্ট কোনও কাজ নয়।
সানডে

তবে ফায়ারবেস টেস্ট ল্যাবের মতো সরঞ্জামগুলির জন্য একটি APK বা AAB প্রয়োজন এবং কোনও এআর ফাইল গ্রহণ করবেন না যা লাইব্রেরির এসেম্বল টাস্কের আউটপুট
মোস্তফা বার্কে মুটলু

1

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

আমার একই রকম সমস্যা ছিল এবং আমি দেখতে পেয়েছি যে নিম্নলিখিতগুলি সবসময় কাজ করে:

( দ্রষ্টব্য: এই নির্দেশাবলী স্ক্র্যাচ থেকে একটি নতুন প্রকল্প গ্রুপ তৈরির জন্য। আপনি যদি ইতিমধ্যে প্রকল্প গ্রুপের কিছু অংশ তৈরি করে থাকেন তবে আপনাকে আপনার প্রকল্পগুলি পরিবর্তন করতে হবে যাতে তারা একইভাবে সংযুক্ত থাকে connect )

  1. তৈরির সময় "ইস লাইব্রেরি" চেকবক্সটি পরীক্ষা করে একটি নতুন অ্যান্ড্রয়েড লাইব্রেরি প্রকল্প তৈরি করুন। (উদাহরণস্বরূপ, "রেমিংটনঅ্যান্ড্রয়েড টুলস" নামে একটি অ্যান্ড্রয়েড প্রকল্প)।
  2. অ্যান্ড্রয়েড লাইব্রেরি প্রকল্প তৈরি করুন এবং এটি বিন ফোল্ডারে একটি জার ফাইল তৈরি করেছে তা যাচাই করুন। (উদাহরণস্বরূপ "রিমিংটনঅ্যান্ড্রয়েডটুলস.জার" নামে একটি জার ফাইল))
  3. অ্যান্ড্রয়েড অ্যাপ্লিকেশন যা অ্যান্ড্রয়েড টেস্ট অ্যাপ হিসাবে পরিবেশন করবে তা পরীক্ষার জন্য একটি ফাঁকা অ্যান্ড্রয়েড প্রকল্প তৈরি করুন। (উদাহরণস্বরূপ, "রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ" নামে একটি অ্যান্ড্রয়েড প্রকল্প)। অ্যান্ড্রয়েড টেস্ট অ্যাপ প্রকল্পের উত্স কোড বা সংস্থানগুলি পরিবর্তন করার দরকার নেই যদি না আপনার কাছে টেস্টিংয়ের জন্য যুক্ত করা দরকার must অ্যান্ড্রয়েড টেস্ট অ্যাপ প্রকল্পে কোনও পরিবর্তন ছাড়াই অনেকগুলি বিষয় পরীক্ষা করা যেতে পারে। অ্যান্ড্রয়েড টেস্ট অ্যাপ প্রকল্পটি আপনার অ্যান্ড্রয়েড লাইব্রেরি প্রকল্প এবং অ্যান্ড্রয়েড জুনিট প্রকল্পের মধ্যে একটি সেতু যা অ্যান্ড্রয়েড লাইব্রেট প্রকল্পের অ্যান্ড্রয়েড জুনিটের মাধ্যমে পরীক্ষা সম্ভব করে তোলে।
  4. অ্যান্ড্রয়েড টেস্ট অ্যাপ প্রকল্পের জন্য জাভা বিল্ড পাথের লাইব্রেরি ট্যাবটিতে যান ("উদাহরণস্বরূপ" রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ্লিকেশন ")।
  5. "জারস যুক্ত করুন ..." বোতামের মাধ্যমে অ্যান্ড্রয়েড গ্রন্থাগার প্রকল্পের (এই উদাহরণে "রেমিংটনঅ্যান্ড্রয়েড টুলস") এর জার ফাইল (এই উদাহরণে "রেমিংটনঅ্যান্ড্রয়েডটুলস.জার") যুক্ত করুন।
  6. লক্ষ্য হিসাবে একটি নতুন অ্যান্ড্রয়েড টেস্ট প্রকল্প তৈরি করুন (উদাহরণস্বরূপ "রেমিংটনঅ্যান্ড্রয়েডটুলস টেস্টার") যা অ্যান্ড্রয়েড লাইব্রেরি পরীক্ষক হিসাবে পরিবেশন করবে এবং অ্যান্ড্রয়েড টেস্ট অ্যাপ প্রকল্পটি (এই উদাহরণে "রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ্লিকেশন") নির্বাচন করবে।
  7. অ্যান্ড্রয়েড লাইব্রেরি পরীক্ষক প্রকল্পের জন্য জাভা বিল্ড পাথের লাইব্রেরি ট্যাবে যান ("উদাহরণস্বরূপ" রেমিংটনঅ্যান্ড্রয়েডটুলস পরীক্ষক ")।
  8. "জারস যুক্ত করুন ..." বোতামের মাধ্যমে অ্যান্ড্রয়েড গ্রন্থাগার প্রকল্পের (এই উদাহরণে "রেমিংটনঅ্যান্ড্রয়েড টুলস") এর জার ফাইল (এই উদাহরণে "রেমিংটনঅ্যান্ড্রয়েডটুলস.জার") যুক্ত করুন।
  9. অ্যান্ড্রয়েড লাইব্রেরি পরীক্ষক প্রকল্পে (উদাহরণস্বরূপ "danny.remington.remington_android_tools_test_app.est") এ আপনার অ্যান্ড্রয়েড প্যাকেজের শেষ ফোল্ডারটি সন্ধান করুন এবং ক্রিয়াকলাপের ক্রমবর্ধমান টেস্ট ক্লাস (উদাহরণস্বরূপ "মেইনএকটিভিটি টেস্ট") যুক্ত করুন যা ক্রিয়াকলাপ ইনস্ট্রিমেন্টেশনটেষ্টক্যাস 2 থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।
  10. অ্যাক্টিভিটিসিনস্ট্রিমেশন টেস্টক্যাস 2 এর প্যারামিটার হিসাবে অ্যান্ড্রয়েড টেস্ট অ্যাপ্লিকেশনটির ক্রিয়াকলাপ (উদাহরণস্বরূপ "টেস্টঅ্যাক্টিভিটি") ("উদাহরণস্বরূপ" রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ্লিকেশন ") ব্যবহার করতে পরীক্ষা শ্রেণি (এই উদাহরণে" টেস্টএকটিভিটি টেস্ট ") সম্পাদনা করুন।
  11. পরীক্ষার শ্রেণিটি সম্পাদনা করুন (এই উদাহরণে "টেস্টএকটিভিটি টেস্ট") এবং একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করুন যা সুপার (ক্লাস) এ কল করে এবং অ্যান্ড্রয়েড টেস্ট অ্যাপের ক্লাসে পাস করে (উদাহরণস্বরূপ "টেস্টএক্টিভিটি.ক্লাস")।

আপনার অনুরূপ দেখতে তিনটি প্রকল্প (অ্যান্ড্রয়েড লাইব্রেরি, অ্যান্ড্রয়েড টেস্ট অ্যাপ, অ্যান্ড্রয়েড লাইব্রেরি পরীক্ষক) দিয়ে শেষ করা উচিত:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

আপনার অ্যান্ড্রয়েড লাইব্রেরি যা দেখতে এটির অনুরূপ তা পরীক্ষা করার জন্য একটি ক্লাস শেষ করা উচিত:

package danny.remington.remington_android_tools_test_app.test;

import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

তারপরে আপনি যে কোনও পরীক্ষা যোগ করতে পারেন। আপনার পরীক্ষা চালানোর জন্য আপনার অ্যান্ড্রয়েড টেস্ট অ্যাপের ("উদাহরণস্বরূপ" রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ ") রেফারেন্সের প্রয়োজন হবে না যদি না তাদের অ্যান্ড্রয়েড নির্দিষ্ট উপাদান অ্যাক্সেসের প্রয়োজন হয় (উদাহরণস্বরূপ, অ্যাসেটস ফোল্ডারের মতো)। আপনার যদি কোনও অ্যান্ড্রয়েড নির্দিষ্ট উপাদান অ্যাক্সেসের প্রয়োজন হয় তবে আপনি অ্যান্ড্রয়েড টেস্ট অ্যাপ্লিকেশনটি ("উদাহরণস্বরূপ" রেমিংটনঅ্যান্ড্রয়েডটুলসটেষ্ট অ্যাপ ") সংশোধন করে তা করতে পারেন এবং তারপরে স্ট্যান্ডার্ড অ্যান্ড্রয়েড জুনিট এপিআইয়ের সরবরাহকারীর মাধ্যমে এটিকে উল্লেখ করতে পারেন। (আপনি এখানে সে সম্পর্কে আরও পড়তে পারেন: http://developer.android.com/tools/testing/testing_android.html )


0

যদি আপনার অলিটি ক্লাসগুলি কোনও অ্যান্ড্রয়েড নির্দিষ্ট কোডের উপর নির্ভর না করে তবে আপনি কেবল স্ট্যান্ডার্ড JUnit ইউনিট পরীক্ষা ব্যবহার করতে পারেন। অ্যান্ড্রয়েড সংস্করণ ব্যবহার করার প্রয়োজন নেই।


4
এটি কার্যকর হয় না কারণ স্ট্যান্ডার্ড JUnit স্ট্যান্ডার্ড JVM এর সাথে সংকলিত হয় যখন অ্যান্ড্রয়েড জাভা ফাইলগুলি ডালভিক ভিএম-তে সংকলিত হয়।
ড্যানি রেমিংটন - ওএমএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.