একটি তালিকা পরীক্ষা করা হচ্ছে ... সব একই শর্তে বা প্রতিটি শর্তের জন্য একটি পরীক্ষায়?


21

আমি পরীক্ষা করছি যে কোনও ফাংশন তালিকায় যা প্রত্যাশা করেছিল তা করে। তাই আমি পরীক্ষা করতে চাই

f(null) -> null
f(empty) -> empty
f(list with one element) -> list with one element
f(list with 2+ elements) -> list with the same number of elements, doing what expected

এটি করার জন্য, সর্বোত্তম পদ্ধতির কী?

  • "ওয়ার্কসএএসপ্রেসিড" নামে অধীনে একই (পদ্ধতি) পরীক্ষায় সমস্ত কেস পরীক্ষা করা হচ্ছে
  • প্রতিটি মামলার জন্য একটি করে পরীক্ষা রাখা, এইভাবে হওয়া
    • "WorksAsExpectedWhenNull"
    • "WorksAsExpectedWhenEmpty"
    • "WorksAsExpectedWhenSingleElement"
    • "WorksAsExpectedWhenMoreElements"
  • আরেকটি পছন্দ যা আমি :-) সম্পর্কে ভাচ্ছিলাম না


2
আমি পৃথক পরীক্ষার কেস হিসাবে এটি লিখতে হবে। আপনি যদি পরীক্ষার ব্যবস্থাটিকে সমর্থন করে তবে আপনি প্যারামিটারাইজড পরীক্ষাগুলি ব্যবহার করতে পারেন।
jonrsharpe

5
আপনি যদি নিজের পরীক্ষাগুলি কোনও প্রদত্ত ... যদি ... তারপরে স্টাইল করেন তবে স্ব-স্পষ্ট হয়ে ওঠে যে তাদের সত্যই পৃথকভাবে পরীক্ষা করা উচিত ...
রবি ডি

1
আমি কেবল যুক্ত করতে চাই: আইএমও, প্রান্তের কেসগুলি (নাল এবং খালি যেমন) পৃথক পরীক্ষায় পৃথক করা ভাল, কারণ এগুলি প্রায়শই বিভিন্ন সম্ভাব্য বাস্তবায়নের ক্ষেত্রে বিশেষ ক্ষেত্রে যুক্তি যুক্ত করে, এবং যদি এই পরীক্ষাগুলি ব্যর্থ হয়, তবে তারা স্পষ্টভাবে নির্দেশ করবে কীভাবে পরীক্ষার অধীনে কোডটি ব্যর্থ হয় (কী ঘটছে তা নির্ধারণের জন্য আপনাকে আরও গভীর খনন করতে হবে না, বা পরীক্ষা কেসটি ডিবাগ করতে হবে না)।
ফিলিপ মিলোভানোভিć

1
সদৃশ উপাদানগুলির সাথে তালিকা?
atayenel

উত্তর:


30

একটি পরীক্ষার ক্ষেত্রে, বা অনেকের মধ্যে পরীক্ষার একটি সেট সম্পাদন করা যায় কিনা এর জন্য আমি থাম্বের সহজ নিয়মটি ব্যবহার করি: এটি কি কেবল একটি সেটআপ জড়িত?

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

আপনার ক্ষেত্রে যদিও, আমি একটি নাল তালিকা সেট করতে হবে, একটি খালি তালিকা ইত্যাদি। এটি একাধিক সেটআপ। সুতরাং আমি অবশ্যই এক্ষেত্রে একাধিক পরীক্ষা তৈরি করব।

অন্যরা যেমন উল্লেখ করেছে, সেই "একাধিক পরীক্ষাগুলি" একক প্যারামিটারাইজড টেস্ট কেস হিসাবে থাকতে পারে; অর্থাত্ একই পরীক্ষার কেসটি বিভিন্ন সেটআপ ডেটার বিপরীতে চালিত হয়। এটি কার্যকর একটি সমাধান হ'ল এটির চাবিকাঠিটি পরীক্ষার অন্যান্য অংশে রয়েছে: "ক্রিয়া" এবং "দৃsert়তা"। আপনি যদি একই ক্রিয়া সম্পাদন করতে পারেন এবং প্রতিটি ডেটা সেটে দৃser়তার সাথে বিবেচনা করতে পারেন তবে এই পদ্ধতির ব্যবহার করুন। যদি আপনি ifসেই ডেটার বিভিন্ন অংশের বিরুদ্ধে বিভিন্ন কোড চালানোর জন্য উদাহরণস্বরূপ নিজেকে যুক্ত করে দেখতে পান তবে এটি সমাধান নয়। পরের ক্ষেত্রে স্বতন্ত্র পরীক্ষার কেসগুলি ব্যবহার করুন।


14

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

আপনার কাঠামোর উপর ভিত্তি করে সম্ভাব্য সরঞ্জামগুলি:

  • তত্ত্বগুলি । একটি তত্ত্ব আপনাকে ডেটাগুলির সেট সম্পর্কে একাধিক সত্যের পরীক্ষা করতে দেয়। ফ্রেমওয়ার্কটি আপনার পরীক্ষাগুলিকে একাধিক পরীক্ষার ডেটা দৃশ্যের সাথে ফিড করবে - হয় ক্ষেত্রের মাধ্যমে বা কোনও স্ট্যাটিক পদ্ধতিতে যা ডেটা উত্পন্ন করে। যদি আপনার কিছু তথ্য পূর্ব শর্তগুলির ভিত্তিতে প্রয়োগ হয় এবং অন্যরা এই ফ্রেমওয়ার্কগুলি অনুমানের ধারণাটি প্রবর্তন করে না । আপনার Assume.that()পূর্বের শর্তটি ব্যর্থ হলে ডেটা জন্য পরীক্ষা কেবল এড়িয়ে যায়। এটি আপনাকে "প্রত্যাশিত হিসাবে কাজগুলি" সংজ্ঞা দিতে দেয় এবং তারপরে কেবল এটিকে প্রচুর ডেটা ফিড করে। যখন আপনি ফলাফলগুলি দেখেন, আপনার প্যারেন্ট টেস্টগুলির জন্য একটি এন্ট্রি এবং তারপরে প্রতিটি টুকরো ডেটার জন্য একটি উপ-প্রবেশিকা রয়েছে।
  • প্যারামিটারাইজড টেস্ট । প্যারামিটারাইজড টেস্টগুলি তত্ত্বগুলির পূর্বসূরী ছিল, সুতরাং আপনার তত্ত্বগুলির সাথে এমন পূর্বশর্ত পরীক্ষা করা যাবেনা। শেষ ফলাফল একই। আপনি ফলাফলগুলি দেখেন, পরীক্ষার জন্যই আপনার পিতামাতার এন্ট্রি রয়েছে এবং তারপরে প্রতিটি ডেটা পয়েন্টের জন্য একটি নির্দিষ্ট এন্ট্রি রয়েছে।
  • একাধিক সংস্থার সাথে একটি পরীক্ষা । সেট আপটি করতে কম সময় লাগে, তবে আপনি একবারে কিছুটা উদ্ঘাটিত করেন। যদি পরীক্ষাটি দীর্ঘ হয় এবং অনেকগুলি পৃথক পরিস্থিতি পরীক্ষা করা হয় তবে দুটি বড় ঝুঁকি রয়েছে: এটি চালাতে দীর্ঘ সময় নিতে হবে এবং আপনার দল এতে বিরক্ত হয়ে পরীক্ষাটি বন্ধ করে দেবে।
  • অনুরূপ বাস্তবায়ন একাধিক পরীক্ষা । এটি লক্ষ করা গুরুত্বপূর্ণ যে যদি দাবিগুলি পৃথক হয় তবে সেগুলি পরীক্ষা করে ওভারল্যাপিং হয় না। তবে এটি একটি টিডিডি ফোকাসযুক্ত দলের প্রচলিত জ্ঞান হবে।

আমি কঠোর মানসিকতার মধ্যে নেই যে কেবলমাত্র assertআপনার পরীক্ষায় একটি বক্তব্য থাকতে পারে , তবে আমি সমস্ত বিধিনিষেধগুলি একক পদক্ষেপের পরবর্তী অবস্থার পরীক্ষা করতে হবে এমন নিষেধাজ্ঞাগুলি আমি রাখি। পরীক্ষাগুলির মধ্যে একমাত্র পার্থক্য যদি ডেটা হয় তবে আমি প্যারামিটারাইজড পরীক্ষা বা তত্ত্বগুলির মতো আরও উন্নত ডেটা চালিত পরীক্ষামূলক বৈশিষ্ট্যগুলি ব্যবহার করার মানসিকতার মধ্যে আছি।

সেরা ফলাফলটি কী তা নির্ধারণ করতে আপনার বিকল্পগুলি ওজন করুন। আমি বলব যে "ওয়ার্কসএএসএকসিটারহাঁসনহাল" আপনি যে কোনও ক্ষেত্রে যে কোনও সংস্থার সাথে বিভিন্ন সংখ্যক উপাদানের বিবিধ বৈশিষ্ট্য রয়েছে সেগুলির তুলনায় মৌলিকভাবে পৃথক।


5

সেগুলি বিভিন্ন পরীক্ষার কেস, তবে পরীক্ষার কোডটি একই। প্যারামিটারাইজড টেস্ট ব্যবহার করা তাই সেরা সমাধান। যদি আপনার পরীক্ষার কাঠামোটি প্যারামিটারাইজেশন সমর্থন করে না, তবে ভাগ করা কোডটিকে কোনও সহায়ক ফাংশনে নিষ্ক্রিয় করুন এবং স্বতন্ত্র পরীক্ষার ক্ষেত্রে এটি কল করুন।

একটি পরীক্ষার ক্ষেত্রে লুপের মাধ্যমে প্যারামিট্রাইজেশন এড়ানোর চেষ্টা করুন, কারণ কোন ডেটা সেটটি ত্রুটির কারণ হয়েছিল তা নির্ধারণ করা কঠিন করে তোলে।

আপনার টিডিডি লাল – সবুজ – রিফ্যাক্টর চক্রটিতে আপনার একবারে একটি উদাহরণ সেট করা উচিত। একাধিক পরীক্ষার কেসগুলিকে প্যারামিট্রাইজড পরীক্ষার সাথে সংমিশ্রণ করা রিফ্যাক্টরিং পদক্ষেপের অংশ হবে।

একটি বরং ভিন্ন পদ্ধতির সম্পত্তি পরীক্ষা হয় । আপনি বিভিন্ন (প্যারামেট্রাইজড) পরীক্ষা তৈরি করবেন যা কংক্রিট ইনপুট ডেটা নির্দিষ্ট না করেই আপনার ফাংশনের বিভিন্ন বৈশিষ্ট্য যুক্ত করে। যেমন একটি সম্পত্তি হতে পারে: সমস্ত তালিকার জন্য xs, তালিকার ys = f(xs)সমান দৈর্ঘ্য রয়েছে xs। পরীক্ষার কাঠামোটি তারপরে আকর্ষণীয় তালিকা এবং এলোমেলো তালিকা তৈরি করবে এবং জোর দেওয়া হবে যে আপনার বৈশিষ্ট্যগুলি তাদের সকলের জন্য রয়েছে। এটি ম্যানুয়ালি উদাহরণ উল্লেখ থেকে দূরে সরে যায়, কারণ ম্যানুয়ালি উদাহরণ নির্বাচন করা আকর্ষণীয় প্রান্তের মামলাগুলি মিস করতে পারে।


শেষ বাক্যে "মিস "টি কি" সন্ধান "করা উচিত নয়?
রবি ডি

@ রবিবিডি ইংরেজি অস্পষ্ট, স্থির।
আমন

3

প্রতিটি ক্ষেত্রে একটি করে পরীক্ষা নেওয়া যথাযথ কারণ প্রতিটি পরীক্ষায় একটি একক ধারণা পরীক্ষা করা একটি ভাল গাইডলাইন যা প্রায়শই সুপারিশ করা হয়।

এই পোস্টটি দেখুন: একক ইউনিট পরীক্ষায় একাধিক সংস্থান থাকা কি ঠিক হবে? । এখানে একটি প্রাসঙ্গিক এবং বিস্তারিত আলোচনাও রয়েছে:

আমার গাইডলাইনটি হ'ল এটি যে আপনি প্রতি পরীক্ষায় একটি লজিকাল কনসপট পরীক্ষা করেন। একই বস্তুতে আপনার একাধিক সংস্থান থাকতে পারে। তারা সাধারণত একই ধারণা পরীক্ষা করা হবে। সূত্র - রায় ওশেরভ

[...]

পরীক্ষাগুলি কেবল একটি কারণে ব্যর্থ হওয়া উচিত, তবে এর অর্থ সর্বদা এই নয় যে কেবলমাত্র একটি আসক্তি বিবৃতি থাকা উচিত। আইএমএইচও "অ্যারেঞ্জ, অ্যাক্ট, জোর" ধরণ ধরে রাখা আরও গুরুত্বপূর্ণ hold

মূলটি হ'ল আপনার কেবলমাত্র একটি ক্রিয়া রয়েছে এবং তারপরে আপনি দৃ action়তা ব্যবহার করে সেই ক্রিয়াটির ফলাফলগুলি পরিদর্শন করেন। তবে এটি "ব্যবস্থা করুন, আইন, দৃ As়তা, পরীক্ষার সমাপ্তি"। আপনি যদি আরও একটি ক্রিয়া করে পরীক্ষা চালিয়ে যাওয়ার প্রলোভন দেখান এবং এরপরে আরও দৃser় প্রতিবেদন করে থাকেন তবে পরিবর্তে এটিকে একটি পৃথক পরীক্ষা করুন। সূত্র


0

আমার ধারণা, এটি পরীক্ষার অবস্থার উপর নির্ভর করে।

  • আপনার পরীক্ষার যদি পরীক্ষাটি সেটআপের জন্য কেবল 1 শর্ত থাকে তবে অনেকগুলি পার্শ্ব প্রতিক্রিয়া। একাধিক দৃsert় গ্রহণযোগ্য
  • তবে যখন আপনার একাধিক শর্ত রয়েছে, তার মানে আপনার একাধিক পরীক্ষার কেস রয়েছে, প্রতিটি কেবলমাত্র 1 ইউনিট পরীক্ষার দ্বারা কভার করা উচিত।

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