আমার বর্তমান প্রকল্পে, স্কেলযোগ্য ইন্টিগ্রেশন টেস্টগুলি তৈরি করার জন্য একটি ভাল সমাধান নিয়ে আসার জন্য আমার খুব কষ্ট হচ্ছে, যার কোনও পার্শ্ব প্রতিক্রিয়া নেই। পার্শ্ব প্রতিক্রিয়া মুক্ত সম্পত্তি সম্পর্কে একটু স্পষ্টতা: এটি বেশিরভাগ ডাটাবেস সম্পর্কে; পরীক্ষা শেষ হওয়ার পরে ডাটাবেসে কোনও পরিবর্তন হওয়া উচিত নয় (রাষ্ট্রটি সংরক্ষণ করা উচিত)। সম্ভবত স্কেলাবিলিটি এবং রাষ্ট্র সংরক্ষণ একসাথে আসে না তবে আমি আরও ভাল সমাধানের জন্য সত্যই এগিয়ে যেতে চাই।
এখানে একটি সাধারণ ইন্টিগ্রেশন পরীক্ষা (এই পরীক্ষাগুলি ডাটাবেস স্তরটিকে স্পর্শ করে):
public class OrderTests {
List<Order> ordersToDelete = new ArrayList<Order>();
public testOrderCreation() {
Order order = new Order();
assertTrue(order.save());
orderToDelete.add(order);
}
public testOrderComparison() {
Order order = new Order();
Order order2 = new Order();
assertFalse(order.isEqual(order2);
orderToDelete.add(order);
orderToDelete.add(order2);
}
// More tests
public teardown() {
for(Order order : ordersToDelete)
order.delete();
}
}
যেহেতু কেউ কল্পনা করতে পারেন, এই পদ্ধতির ফলে অত্যন্ত ধীর গতির টেস্টগুলি পাওয়া যায়। এবং, যখন সম্পূর্ণ ইন্টিগ্রেশন পরীক্ষাগুলিতে প্রয়োগ করা হয় তখন সিস্টেমের কেবলমাত্র একটি ছোট অংশ পরীক্ষা করতে এটি প্রায় 5 সেকেন্ড সময় নেয়। কভারেজ বাড়ানোর পরে আমি এই সংখ্যাটি উপরে যেতে কল্পনা করতে পারি।
এই ধরনের পরীক্ষা লেখার জন্য অন্য পদ্ধতির কী হবে? আমি যে বিকল্পটি ভাবতে পারি তা হ'ল ধরণের বৈশ্বিক ভেরিয়েবল (এক শ্রেণীর মধ্যে) এবং সমস্ত পরীক্ষার পদ্ধতিগুলি এই পরিবর্তনশীল ভাগ করে। ফলস্বরূপ, কেবলমাত্র কয়েকটি অর্ডার তৈরি এবং মুছে ফেলা হয়; দ্রুত পরীক্ষা ফলাফল। যাইহোক, আমি মনে করি এটি আরও বড় সমস্যাটির পরিচয় দেয়; পরীক্ষাগুলি আর বিচ্ছিন্ন হয় না এবং সেগুলি বোঝা ও বিশ্লেষণ করা আরও আরও কঠিন হয়ে যায়।
এটি কেবল এটি হতে পারে যে ইন্টিগ্রেশন পরীক্ষাগুলি ইউনিট পরীক্ষার মতো প্রায়শই চালানো হয় না; সুতরাং স্বল্প পারফরম্যান্স তাদের জন্য গ্রহণযোগ্য হতে পারে। যাই হোক না কেন, কেউ যদি স্কেল্যাবিলিটি উন্নতির বিকল্প নিয়ে আসে তবে তা জেনে রাখা ভাল।