পরীক্ষাগুলি এবং বাস্তব কোডের মধ্যে ডেটা নকল করা ভাল বা খারাপ? উদাহরণস্বরূপ, ধরুন আমার কাছে পাইথন ক্লাস রয়েছে FooSaver
যা নির্দিষ্ট নামের সাথে ফাইলগুলি একটি নির্দিষ্ট ডিরেক্টরিতে সংরক্ষণ করে:
class FooSaver(object):
def __init__(self, out_dir):
self.out_dir = out_dir
def _save_foo_named(self, type_, name):
to_save = None
if type_ == FOOTYPE_A:
to_save = make_footype_a()
elif type == FOOTYPE_B:
to_save = make_footype_b()
# etc, repeated
with open(self.out_dir + name, "w") as f:
f.write(str(to_save))
def save_type_a(self):
self._save_foo_named(a, "a.foo_file")
def save_type_b(self):
self._save_foo_named(b, "b.foo_file")
এখন আমার পরীক্ষায় আমি নিশ্চিত করতে চাই যে এই সমস্ত ফাইল তৈরি হয়েছিল, তাই আমি এরকম কিছু বলতে চাই:
foo = FooSaver("/tmp/special_name")
foo.save_type_a()
foo.save_type_b()
self.assertTrue(os.path.isfile("/tmp/special_name/a.foo_file"))
self.assertTrue(os.path.isfile("/tmp/special_name/b.foo_file"))
যদিও এটি ফাইলের নামগুলি দুটি জায়গায় নকল করে, আমি মনে করি এটি ভাল: এটি আমাকে অন্য প্রান্তে বেরিয়ে আসার প্রত্যাশা করে ঠিক কী লিখতে বাধ্য করে, এটি টাইপসের বিরুদ্ধে সুরক্ষার একটি স্তর যোগ করে এবং সাধারণত আমার আত্মবিশ্বাস বোধ করে যে জিনিসগুলি কাজ করছে ঠিক যেমনটি আমি প্রত্যাশা করি আমি জানি যে আমি যদি পরিবর্তন a.foo_file
করতে type_a.foo_file
আমাকে কি করতে হবে যাচ্ছি ভবিষ্যতে কিছু কিছু অনুসন্ধান-এবং-প্রতিস্থাপন আমার পরীক্ষা, কিন্তু আমি একটি চুক্তি যে খুব বড় মনে করি না। আমি কোড এবং পরীক্ষাগুলি সম্পর্কে আমার বোঝাপড়াটি সিঙ্কে রয়েছে কিনা তা নিশ্চিত করার পরিবর্তে পরীক্ষাটি আপডেট করতে ভুলে গেলে আমার কিছু ভুল ইতিবাচক থাকে।
একজন সহকর্মী মনে করেন যে এই সদৃশটি খারাপ, এবং আমি উভয় পক্ষকে এই জাতীয় কিছুতে রিএক্টর করার পরামর্শ দিয়েছি:
class FooSaver(object):
A_FILENAME = "a.foo_file"
B_FILENAME = "b.foo_file"
# as before...
def save_type_a(self):
self._save_foo_named(a, self.A_FILENAME)
def save_type_b(self):
self._save_foo_named(b, self.B_FILENAME)
এবং পরীক্ষায়:
self.assertTrue(os.path.isfile("/tmp/special_name/" + FooSaver.A_FILENAME))
self.assertTrue(os.path.isfile("/tmp/special_name/" + FooSaver.B_FILENAME))
আমি এটি পছন্দ করি না কারণ এটি আমার আত্মবিশ্বাস তৈরি করে না যে কোডটি আমার প্রত্যাশা অনুযায়ী কাজ করছে --- আমি সবেমাত্র out_dir + name
প্রযোজনা এবং পরীক্ষার দিক উভয় ধাপটি নকল করেছি । এটি +
স্ট্রিংগুলিতে কীভাবে কাজ করে তা আমার বোঝার কোনও ত্রুটি উন্মোচিত করবে না এবং এটি টাইপগুলি ধরবে না।
অন্যদিকে, দু'বার এই স্ট্রিংগুলি দু'বার লেখার চেয়ে স্পষ্টতই কম ভঙ্গুর এবং এর মতো দুটি ফাইল জুড়ে ডেটা নকল করা আমার পক্ষে কিছুটা ভুল বলে মনে হচ্ছে।
এখানে কি স্পষ্ট নজির আছে? পরীক্ষার এবং উত্পাদন কোড জুড়ে ধ্রুবকগুলি অনুলিপি করা ঠিক আছে, বা এটি খুব ভঙ্গুর?