সম্প্রতি গ্র্যাডলের ব্লগ পোস্টে এটি আপনার বিষয়গুলি পুনরায় চালানো বন্ধ করুন । লেখক ব্যবহার করে একটি উদাহরণ দেখায় outputs.upToDateWhen { false }
এবং ব্যাখ্যা দিয়েছে কেন এটি ভুল:
এটি আসলে পুনরায় জোর করে না
এই স্নিপেটের লেখক সম্ভবত যা বলতে চেয়েছিলেন তা হ'ল "সর্বদা আমার পরীক্ষাগুলি পুনরায় চালু করুন"। এই স্নিপেট যদিও এটি করে না। এটি কেবলমাত্র পুরানো কাজটিকে চিহ্নিত করবে, গ্রেডলকে আউটপুট পুনরায় তৈরি করতে বাধ্য করবে। তবে এখানে জিনিসটি রয়েছে, যদি বিল্ড ক্যাশে সক্ষম করা থাকে তবে আউটপুটটি পুনরায় তৈরি করতে গ্রেডলকে টাস্কটি চালানোর দরকার নেই। এটি ক্যাশে একটি এন্ট্রি খুঁজে পাবে এবং পরীক্ষার আউটপুট ডিরেক্টরিতে ফলাফলটি আনপ্যাক করে।
এই স্নিপেটের ক্ষেত্রেও একই কথা:
test.dependsOn cleanTest
আউটপুট পরিষ্কার হওয়ার পরে গ্রেডল বিল্ড ক্যাশে থেকে পরীক্ষার ফলাফলগুলি আনপ্যাক করবে, তাই আর কিছুই পুনরায় চালু হবে না। সংক্ষেপে, এই স্নিপেটগুলি খুব ব্যয়বহুল কোনও অপশন তৈরি করছে।
যদি আপনি এখন "ঠিক আছে, আমিও ক্যাশেটি নিষ্ক্রিয় করব" ভাবছি, তবে আপনাকে কেন করা উচিত নয় তা আমাকে বলি।
তারপরে, লেখক কেন কিছু পরীক্ষা পুনর্বার কেন সময় নষ্ট করে তা ব্যাখ্যা করে চলেছেন:
আপনার পরীক্ষাগুলির সিংহভাগ হ্রাস করা উচিত, যেমন একই ফলাফল দেওয়া উচিত তাদের একই ফলাফল দেওয়া উচিত।
আপনি যে কয়েকটি ক্ষেত্রে পরীক্ষাটি পুনরায় চালু করতে চান যেখানে কোডটি পরিবর্তন হয়নি সেখানে আপনার একটি ইনপুট হিসাবে মডেল করা উচিত। এখানে ব্লগ পোস্টের উভয় উদাহরণ রয়েছে যা কোনও ইনপুট যুক্ত করে দেখায় যাতে কার্যটি এটির আপ-টু-ডেট চেকের সময় ব্যবহার করে।
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
আমি পুরো ব্লগ পোস্ট পড়ার পরামর্শ দিচ্ছি।