অন্যান্য উত্তরের বিপরীতে, এটি লক্ষ করা গুরুত্বপূর্ণ যে পরীক্ষার অধীনে থাকা সিস্টেমটি (এসইউটি) রিফ্যাক্টর হলে পরীক্ষার কিছু উপায় ভঙ্গুর হয়ে যেতে পারে, যদি পরীক্ষা হোয়াইটবক্স হয়।
যদি আমি কোনও উপহাসের কাঠামো ব্যবহার করি যা মোকগুলিতে ডাকা পদ্ধতিগুলির ক্রম যাচাই করে (যখন আদেশটি অপ্রাসঙ্গিক কারণ কলগুলি পার্শ্ব-প্রতিক্রিয়া মুক্ত); তারপরে যদি আমার কোডটি সেই পদ্ধতিটির সাথে ক্লিনার হয় তবে ভিন্ন পদ্ধতিতে কল হয় এবং আমি রিফ্যাক্টর, তবে আমার পরীক্ষাটি বিরতি হবে। সাধারণভাবে, মকগুলি পরীক্ষাগুলিতে ভঙ্গুরতা প্রবর্তন করতে পারে।
যদি আমি আমার এসইটির ব্যক্তিগত বা সুরক্ষিত সদস্যদের উদ্ভাসিত করে (আমরা "বন্ধু" ভিজ্যুয়াল বেসিকটিতে ব্যবহার করতে পারি, বা অ্যাক্সেস স্তর "অভ্যন্তরীণ" বাড়িয়ে দিতে পারি এবং সি # তে "ইন্টার্নালভিসিবলিটো" ব্যবহার করতে পারি; সহ অনেকগুলি ওও ভাষায়) সি # একটি " পরীক্ষা-নির্দিষ্ট-সাবক্লাস " ব্যবহার করা যেতে পারে) তারপরে হঠাৎ ক্লাসের অভ্যন্তরীণ অবস্থাটি বিবেচনা করবে - আপনি ক্লাসটিকে একটি কালো বাক্স হিসাবে পুনঃসংশোধন করছেন, তবে সাদা বাক্সের পরীক্ষাগুলি ব্যর্থ হবে। মনে করুন একটি একক ক্ষেত্রের পুনরায় ব্যবহার করা হলে বিভিন্ন জিনিস বোঝা যায় (ভাল অনুশীলন নয়!) যখন এসইটি পরিবর্তিত হয় - যদি আমরা এটিকে দুটি ক্ষেত্রে বিভক্ত করি তবে আমাদের ভাঙা পরীক্ষাগুলি আবারও লেখার প্রয়োজন হতে পারে।
পরীক্ষিত-নির্দিষ্ট-সাবক্লাসগুলি সুরক্ষিত পদ্ধতিগুলি পরীক্ষা করতেও ব্যবহার করা যেতে পারে - যার অর্থ হতে পারে যে উত্পাদন কোডের দৃষ্টিকোণ থেকে একটি রিফ্যাক্টর টেস্ট কোডের দৃষ্টিকোণ থেকে একটি ব্রেকিং পরিবর্তন। একটি সুরক্ষিত পদ্ধতিতে বা বাইরে কয়েকটি লাইন সরানো কোনও উত্পাদন পার্শ্ব প্রতিক্রিয়া থাকতে পারে, তবে একটি পরীক্ষা বিরতি।
আমি যদি " টেস্ট হুক " বা অন্য কোনও পরীক্ষা-নির্দিষ্ট বা শর্তসাপেক্ষ সংকলন কোড ব্যবহার করি তবে অভ্যন্তরীণ যুক্তির উপর ভঙ্গুর নির্ভরতার কারণে পরীক্ষাগুলি যাতে ভেঙে না যায় তা নিশ্চিত করা শক্ত হতে পারে।
সুতরাং পরীক্ষাগুলি এসইউটির অন্তরঙ্গ অভ্যন্তরীণ বিবরণে মিলিত হওয়া থেকে রোধ করতে এটি সহায়তা করতে পারে:
- যেখানে সম্ভব সেখানে বিদ্রূপের চেয়ে স্টাব ব্যবহার করুন। আরও তথ্যের জন্য ফ্যাবিও পেরিরার ব্লগটি টাউটোলজিকাল টেস্টগুলি এবং আমার ব্লগটি টোটোলজিকাল পরীক্ষাগুলিতে দেখুন ।
- যদি মক ব্যবহার করা হয় তবে কল করা পদ্ধতির ক্রম যাচাই করা এড়িয়ে চলুন, যদি না এটি গুরুত্বপূর্ণ হয়।
- আপনার এসইউটির অভ্যন্তরীণ অবস্থা যাচাই করার চেষ্টা করুন - সম্ভব হলে এর বাহ্যিক এপিআই ব্যবহার করুন।
- উত্পাদন কোডে পরীক্ষা-নির্দিষ্ট যুক্তি এড়াতে চেষ্টা করুন
- পরীক্ষা-নির্দিষ্ট সাবক্লাস ব্যবহার এড়াতে চেষ্টা করুন।
উপরোক্ত সমস্ত পয়েন্ট হ'ল পরীক্ষায় ব্যবহৃত সাদা বাক্সের মিলনের উদাহরণ। সুতরাং ব্রেকিং টেস্টগুলি সম্পূর্ণরূপে এড়াতে, এসইউটির ব্ল্যাক-বক্স টেস্টিং ব্যবহার করুন।
দাবি অস্বীকার: এখানে রিফ্যাক্টরিংয়ের আলোচনার উদ্দেশ্যে, আমি কোনও দৃশ্যমান বাহ্যিক প্রভাব ছাড়াই অভ্যন্তরীণ বাস্তবায়ন পরিবর্তন করার জন্য এই শব্দটি কিছুটা আরও বিস্তৃতভাবে ব্যবহার করছি। কিছু বিশুদ্ধবাদী একমত হতে পারে না এবং কেবলমাত্র মার্টিন ফোলার এবং কেন্ট বেকের বই রিফ্যাক্টরিং-তে উল্লেখ করতে পারেন - যা পারমাণবিক রিফ্যাক্টরিংয়ের ক্রিয়াকলাপ বর্ণনা করে।
অনুশীলনে, আমরা সেখানে বর্ণিত পারমাণবিক ক্রিয়াকলাপের তুলনায় কিছুটা বড় অ-ব্রেকিং পদক্ষেপ নেওয়ার প্রবণতা পোষণ করি এবং বিশেষত যে পরিবর্তনগুলি যা উত্পাদন কোডটি বাইরে থেকে অভিন্ন আচরণ করে তা পরীক্ষাগুলি পাস হতে পারে না। তবে আমি মনে করি যে "অন্য অ্যালগরিদমের বিকল্প অ্যালগরিদম যার সাথে অভিন্ন আচরণ রয়েছে" একটি রিফ্যাক্টর হিসাবে অন্তর্ভুক্ত করা ন্যায়সঙ্গত এবং আমি মনে করি ফোলার একমত হয়েছেন। মার্টিন ফাউলর নিজেই বলেছেন যে রিফ্যাক্টরিং পরীক্ষাগুলি ভেঙে দিতে পারে:
আপনি যখন মকলিস্ট পরীক্ষা লিখেন, আপনি সরবরাহকারীর সাথে এটি সঠিকভাবে কথা বলে তা নিশ্চিত করার জন্য আপনি এসইউটির আউটবাউন্ড কলগুলি পরীক্ষা করছেন। একটি ক্লাসিক পরীক্ষা কেবল চূড়ান্ত রাষ্ট্র সম্পর্কে চিন্তা করে - কীভাবে সেই রাজ্যটি উত্পন্ন হয়েছিল not মকবিদ পরীক্ষাগুলি এইভাবে কোনও পদ্ধতির প্রয়োগের সাথে আরও বেশি মিলিত হয়। সহযোগীদের কলগুলির প্রকৃতি পরিবর্তন করার ফলে সাধারণত একটি মকবিদ পরীক্ষার বিরতি ঘটে।
[...]
বাস্তবায়নের সাথে মিলিত হওয়াও রিফ্যাক্টরিংয়ে হস্তক্ষেপ করে, যেহেতু বাস্তবায়নের পরিবর্তনগুলি ক্লাসিক পরীক্ষার চেয়ে পরীক্ষাগুলি ভাঙ্গার সম্ভাবনা বেশি।
ফাউলার - মকস স্টাব নয়