জাজানোতে ইউনিট টেস্টিং


12

আমি একটি বড় জ্যাঙ্গো প্রকল্পের জন্য কার্যকর ইউনিট পরীক্ষা লেখার পক্ষে লড়াই করছি। আমার কাছে যুক্তিসঙ্গতভাবে ভাল পরীক্ষার কভারেজ রয়েছে তবে আমি বুঝতে পেরেছি যে পরীক্ষাগুলি আমি লিখছি তা অবশ্যই একীকরণ / গ্রহণযোগ্যতা পরীক্ষা, ইউনিট পরীক্ষার মোটেই নয়, এবং আমার আবেদনের গুরুত্বপূর্ণ অংশ রয়েছে যা কার্যকরভাবে পরীক্ষা করা হচ্ছে না। আমি এই ASAP ঠিক করতে চাই।

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

def summary(self, startTime=None, endTime=None):
    # ... logic to assign a proper start and end time 
    # if none was provided, probably using datetime.now()

    objects = self.related_model_set.manager_method.filter(...)

    return sum(object.key_method(startTime, endTime) for object in objects)

এইরকম কিছু পরীক্ষা করার জন্য কীভাবে কেউ যোগাযোগ করতে পারে?

এখানে আমি যেখানেই রয়েছি। আমার কাছে এটি ঘটে যে ইউনিট পরীক্ষার উদ্দেশ্যটিকে তার তর্কগুলিতে কিছু বিদ্রূপমূলক আচরণ দেওয়া উচিত , সঠিক ফলাফল তৈরি করতে সঠিকভাবে ফিল্টারিং / একত্রিত করা হচ্ছে?by key_methodsummary

বিদ্রূপের ডেটটাইম.নো () যথেষ্ট সোজা, তবে কীভাবে আমি বাকী আচরণগুলি উপহাস করব?

  • আমি ফিক্সচারগুলি ব্যবহার করতে পারি, তবে আমি আমার ডেটা তৈরির জন্য ফিক্সচারগুলি ব্যবহার করার পক্ষে মতামত শুনেছি (দরিদ্র রক্ষণাবেক্ষণ আমার পক্ষে ঘরে আঘাত হ্রাসকারী কন)।
  • আমি ওআরএম এর মাধ্যমে আমার ডেটাও সেটআপ করতে পারতাম তবে এটি সীমাবদ্ধ হতে পারে কারণ এরপরে আমাকে সম্পর্কিত বিষয়গুলিও তৈরি করতে হবে। এবং ORM আপনাকে auto_now_addম্যানুয়ালি ক্ষেত্রগুলির সাথে ঝামেলা করতে দেয় না ।
  • ওআরএমকে উপহাস করা অন্য একটি বিকল্প, তবে কেবল গভীরভাবে বাসাযুক্ত ওআরএম পদ্ধতিগুলিকে ঠাট্টা করা জটিল নয়, তবে ওআরএম কোডের যুক্তিটি পরীক্ষা থেকে বিদ্রূপিত হয়ে যায় এবং মশকরা পরীক্ষাটিকে সত্যই অভ্যন্তরীণ এবং নির্ভরতার উপর নির্ভর করে বলে মনে হয় ফাংশন-কম পরীক্ষা।

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


আপনার এখন থেকে প্রথমে ইউনিট পরীক্ষা লিখতে হবে এটি প্রকৃত উত্পাদন কোডটি লেখার আগে আপনার নকশায় টেস্টিবিলিটি সমস্যা চিহ্নিত করতে সহায়তা করে।
চেডি 2149

2
এটি সহায়ক, তবে কীভাবে অন্তর্নিহিতভাবে রাষ্ট্রীয়, ওআরএম-ভারী অ্যাপ্লিকেশনগুলির সেরা পরীক্ষা করা যায় সে বিষয়টি সত্যই সমাধান করে না।
acjay

আপনার অধ্যবসায় স্তরটি বিমূর্ত করতে হবে
Chedy2149

1
হাইপোথিটিক্যালি দুর্দান্ত শোনায়, তবে যখন প্রকল্প রক্ষণাবেক্ষণের বিষয়টি আসে, তখন আমি মনে করি ব্যবসায়ের যুক্তি এবং অত্যন্ত ভাল-ডকুমেন্টেড জ্যাঙ্গো ওআরএমের মধ্যে একটি কাস্টম-তৈরি দৃ pers়তা স্তরটি সন্নিবেশ করার জন্য একটি তুচ্ছ ব্যয় হয়। হঠাৎ করে, ক্লাসগুলি একটি ছোট ছোট মাঝারি পদ্ধতিতে ভরা হয়ে উঠেছে যা তাদের সময়ের সাথে সাথে পুনরায় সজ্জিত হওয়া প্রয়োজন। তবে সম্ভবত পরীক্ষাগুলি সমালোচনামূলক এমন জায়গাগুলিতে এটি ন্যায়সঙ্গত।
আকজাই

: এই চেকআউট vimeo.com/43612849 : এবং এই vimeo.com/15007792
Chedy2149

উত্তর:


6

আমি এগিয়ে যাচ্ছি এবং আমি এতদূর যা নিয়ে এসেছি তার জন্য একটি উত্তর নিবন্ধ করতে যাচ্ছি।

আমার হাইপোথিসিসটি হ'ল গভীর মিলন এবং রাষ্ট্রের সাথে একটি ফাংশনের জন্য, বাস্তবতাটি এটি কেবল এর বাইরের প্রসঙ্গে নিয়ন্ত্রণ করার জন্য অনেকগুলি লাইন গ্রহণ করতে চলেছে।

আমার পরীক্ষার কেসটি মোটামুটি দেখতে কেমন লাগে তা স্ট্যান্ডার্ড মক লাইব্রেরির উপর নির্ভর করে:

  1. আমি ইভেন্টগুলির ক্রম সেট আপ করতে মানক ORM ব্যবহার করি
  2. আমি আমার নিজের datetimeতৈরিটি তৈরি করেছি এবং সময়টি auto_now_addআমার ডিজাইনের একটি নির্দিষ্ট সময়রেখার সাথে মানিয়ে নেব । আমি ভেবেছিলাম যে ওআরএম এটি অনুমতি দেয় না, তবে এটি ঠিক আছে।
  3. আমি নিশ্চিত হয়েছি যে ফাংশন-আন্ডার-টেস্টটি from datetime import datetimeএমনভাবে ব্যবহার করে যাতে আমি datetime.now()ঠিক সেই ফাংশনে প্যাচ করতে পারি (যদি আমি পুরো datetimeক্লাসকে উপহাস করি তবে ওআরএম ফিট করে)।
  4. আমি object.key_method()আর্গুমেন্টের উপর নির্ভর করে এমন সাধারণ তবে ভাল সংজ্ঞায়িত কার্যকারিতা সহ আমার নিজস্ব প্রতিস্থাপন তৈরি করি । আমি এটি আর্গুমেন্টের উপর নির্ভর করতে চাই, কারণ অন্যথায় আমি হয়ত জানতে পারি না যে ফাংশন-আন্ডার-টেস্টের যুক্তি কাজ করছে কিনা। আমার ক্ষেত্রে, এটা কেবল মধ্যে সেকেন্ডের সংখ্যার ফেরৎ startTimeএবং endTime। আমি এটি একটি ল্যাম্বডায় মুড়িয়ে object.key_method()এবং new_callableপ্যাঁচ দিয়ে সরাসরি কোয়ার্গ ব্যবহার করে প্যাচ করি patch
  5. পরিশেষে, আমি মকটির summaryপ্রদত্ত আচরণের জন্য প্রত্যাশিত হাতে-গণনা করা ফলাফলগুলির সমতাটি পরীক্ষা করার জন্য বিভিন্ন যুক্তির সাথে বিভিন্ন কলগুলিতে একাধিক সংস্থার চালনা করিkey_method

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

আমার অ্যাপ্লিকেশনটিতে, ফাংশনটি বেশ গুরুত্বপূর্ণ এবং এর কার্যকারিতাটি অপ্টিমাইজ করার জন্য রিফ্যাক্টরিং সাপেক্ষে। সুতরাং আমি মনে করি সমস্যাটি মূল্যবান, তবুও জটিলতা। তবে আমি কীভাবে এর কাছে যেতে পারি সে সম্পর্কে আরও ভাল ধারণার জন্য আমি উন্মুক্ত। আমার আরও দীর্ঘ যাত্রার সমস্ত অংশ আরও পরীক্ষামূলক চালিত শৈলীর উন্নয়নের দিকে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.