অ্যান্ড্রয়েডে টেস্ট ডাবল ব্যবহার করুন

আপনি যখন একটি উপাদান বা উপাদানগুলির সিস্টেম পরীক্ষা করেন তখন আপনি এটি বিচ্ছিন্নভাবে করেন। উদাহরণস্বরূপ, একটি ভিউমডেল পরীক্ষা করার জন্য আপনাকে একটি এমুলেটর শুরু করতে এবং একটি UI চালু করতে হবে না কারণ এটি Android ফ্রেমওয়ার্কের উপর নির্ভর করে না (বা উচিত নয়)৷

যাইহোক, পরীক্ষার অধীনে বিষয় কাজ করার জন্য অন্যদের উপর নির্ভর করতে পারে। উদাহরণস্বরূপ, একটি ViewModel কাজ করার জন্য একটি ডেটা সংগ্রহস্থলের উপর নির্ভর করতে পারে।

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

পরীক্ষা দ্বিগুণ প্রকার

বিভিন্ন ধরনের টেস্ট ডাবল আছে:

জাল একটি টেস্ট ডবল যার ক্লাসের "কাজ" বাস্তবায়ন রয়েছে, কিন্তু এটি এমনভাবে প্রয়োগ করা হয় যা পরীক্ষার জন্য ভাল কিন্তু উৎপাদনের জন্য অনুপযুক্ত।

উদাহরণ: একটি ইন-মেমরি ডাটাবেস।

নকলের জন্য উপহাসের কাঠামোর প্রয়োজন হয় না এবং এটি হালকা। তারা পছন্দের হয়।

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

উদাহরণ: যাচাই করুন যে ডাটাবেসের একটি পদ্ধতি ঠিক একবার কল করা হয়েছিল।

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

উদাহরণ: একটি খালি ফাংশন একটি ক্লিক কলব্যাক হিসাবে পাস।

গুপ্তচর একটি বাস্তব বস্তুর উপর একটি মোড়ক যা কিছু অতিরিক্ত তথ্য ট্র্যাক রাখে, উপহাসের মতো। তারা সাধারণত জটিলতা যোগ করার জন্য এড়ানো হয়. নকল বা উপহাস তাই গুপ্তচরদের চেয়ে পছন্দ করা হয়।
ছায়া রোবোলেক্ট্রিকে ব্যবহৃত নকল।

একটি জাল ব্যবহার উদাহরণ

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

object FakeUserRepository : UserRepository {
    fun getUsers() = listOf(UserAlice, UserBob)
}

val const UserAlice = User("Alice")
val const UserBob = User("Bob")

এই নকল UserRepository স্থানীয় এবং দূরবর্তী ডেটা উত্সগুলির উপর নির্ভর করার প্রয়োজন নেই যা উত্পাদন সংস্করণ ব্যবহার করবে৷ ফাইলটি পরীক্ষার উত্স সেটে থাকে এবং উত্পাদন অ্যাপের সাথে পাঠানো হবে না।

একটি জাল নির্ভরতা দূরবর্তী ডেটা উত্সের উপর নির্ভর না করে পরিচিত ডেটা ফিরিয়ে দিতে পারে
চিত্র 1 : একটি ইউনিট পরীক্ষায় একটি জাল নির্ভরতা।

নিম্নলিখিত পরীক্ষাটি যাচাই করে যে ViewModel সঠিকভাবে প্রথম ব্যবহারকারীর নামটি ভিউতে প্রকাশ করে।

@Test
fun viewModelA_loadsUsers_showsFirstUser() {
    // Given a VM using fake data
    val viewModel = ViewModelA(FakeUserRepository) // Kicks off data load on init

    // Verify that the exposed data is correct
    assertEquals(viewModel.firstUserName, UserAlice.name)
}

একটি জাল দিয়ে UserRepository প্রতিস্থাপন করা একটি ইউনিট পরীক্ষায় সহজ, কারণ ভিউমডেলটি পরীক্ষক দ্বারা তৈরি করা হয়েছে। যাইহোক, বড় পরীক্ষায় নির্বিচারে উপাদান প্রতিস্থাপন করা চ্যালেঞ্জিং হতে পারে।

উপাদান এবং নির্ভরতা ইনজেকশন প্রতিস্থাপন

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

এমনকি বড় এন্ড-টু-এন্ড টেস্টগুলিও টেস্ট ডাবল ব্যবহার করে উপকৃত হতে পারে, যেমন একটি যন্ত্রযুক্ত UI পরীক্ষা যা আপনার অ্যাপে সম্পূর্ণ ব্যবহারকারী প্রবাহের মাধ্যমে নেভিগেট করে। সেক্ষেত্রে আপনি আপনার পরীক্ষাকে হারমেটিক করতে চাইতে পারেন। একটি হারমেটিক পরীক্ষা সমস্ত বাহ্যিক নির্ভরতা এড়ায়, যেমন ইন্টারনেট থেকে ডেটা আনা। এটি নির্ভরযোগ্যতা এবং কর্মক্ষমতা উন্নত করে।

চিত্র 2 : একটি বড় পরীক্ষা যা বেশিরভাগ অ্যাপকে কভার করে এবং দূরবর্তী ডেটা জাল করে।

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

পরবর্তী পদক্ষেপ

টেস্টিং কৌশল পৃষ্ঠা দেখায় কিভাবে আপনি বিভিন্ন ধরনের পরীক্ষা ব্যবহার করে আপনার উৎপাদনশীলতা উন্নত করতে পারেন।