যদি আপনার প্রতি পরীক্ষায় কেবল একটি জোর দেওয়া উচিত; একাধিক ইনপুট পরীক্ষা কিভাবে?


15

আমি কয়েকটি পরীক্ষার কেস তৈরির চেষ্টা করছি, এবং পড়েছি যে পরীক্ষার ক্ষেত্রে আপনার প্রতিবেদনের সংখ্যাটি সীমাবদ্ধ করা উচিত।

সুতরাং আমার প্রশ্নটি হ'ল কোনও ফাংশন ডাব্লু / একাধিক ইনপুট পরীক্ষা করার সবচেয়ে ভাল উপায়। উদাহরণস্বরূপ, আমার একটি ফাংশন রয়েছে যা ব্যবহারকারীর কাছ থেকে একটি স্ট্রিং পার্স করে এবং মিনিটের সংখ্যাটি দেয়। স্ট্রিংটি ফর্মটিতে থাকতে পারে "5w6h2d1m"যেখানে w, h, d, mসপ্তাহ, ঘন্টা, দিন এবং মিনিটের সংখ্যার সাথে মিল রয়েছে।

আমি যদি পরীক্ষার নিয়ম অনুসারে '1 জোর' অনুসরণ করতে চাইতাম তবে আমাকে ইনপুটের প্রতিটি পরিবর্তনের জন্য একাধিক পরীক্ষা করতে হবে? এটি নির্বোধ বলে মনে হচ্ছে পরিবর্তে আমার ঠিক কিছু আছে:

self.assertEqual(parse_date('5m'), 5)
self.assertEqual(parse_date('5h'), 300)
self.assertEqual(parse_date('5d') ,7200)
self.assertEqual(parse_date('1d4h20m'), 1700)

একটি পরীক্ষার ক্ষেত্রে। একটি ভাল উপায় আছে কি?


এটি করার সর্বোত্তম উপায় হ'ল প্যারামিটারগুলি ব্যবহার করা (কিছু কাঠামো এই বৈশিষ্ট্যটিকে সমর্থন করে, সমস্ত ফ্রেমওয়ার্কগুলি উচিত) এইভাবে আপনি একক আচরণের পরীক্ষা করছেন তবে অনেক পরীক্ষার কেস
আমলে নিচ্ছেন

উত্তর:


23

"নিয়ম" পরীক্ষায় প্রতি দৃ one়তার সাথে দেখার আরও কার্যকরী উপায় হ'ল একক পরীক্ষায় আপনার দাবী একক ধারণা coverেকে রাখা।

এইভাবে আপনি এখনও একক পরীক্ষায় একটি একক ধারণা পরীক্ষা করছেন। আপনার ক্ষেত্রে, আপনার ইনপুট স্ট্রিংটি একক তারিখে সঠিকভাবে পার্স করা হয়েছে কিনা।

আপনি একাধিক দাবির সাথে একক ধারণার পরীক্ষা করা বা বহু পরীক্ষায় একটি একক দাবী করা ভাল কিনা তা পরীক্ষা করার জন্য কেস ভিত্তিতে আপনার রায়টি ব্যবহার করা উচিত।

আপনার পরীক্ষাগুলি আপনার পদ্ধতিতে ব্যর্থতার বিভিন্ন পয়েন্ট হাইলাইট করতে সক্ষম হওয়ার পরেও পরিষ্কার পরীক্ষার জন্য কম বিকল্প পুনর্বিবেচনার বিকল্পটি যান। আপনি কী চান তা পরিষ্কার হয়ে যেতে চান যখন কোনও পরীক্ষা ঠিক কী ঘটেছিল ঠিক কী ঘটেছিল তার পরিবর্তে আপনার পরীক্ষাটি কী ভুল হয়েছে তা অনুসন্ধানের জন্য ডিবাগ করতে হবে।


17

এটি আপনার পরীক্ষার লাইব্রেরির উপর নির্ভর করে। সি # লাইব্রেরিতে নুনিট আপনি এমন কিছু করতে পারেন:

[TestCase('5m', 5)]
[TestCase('5h', 300)]
[TestCase('5d', 7200)]
[TestCase('1d4h20m', 1700)]
public void ParseDateTest(inputString, expectedMinutes)
{
    Assert.That(parse_date(inputString), Is.EqualTo(expectedMinutes));
}

টেস্টং সহ জাভাতে আপনার @ ডেটাপ্রোভাডার পদ্ধতি রয়েছে
কেমোদা

এটিই সেরা সমাধান আইএমএইচও। প্রায় প্রতিটি ভাষায় আপনি আপনার পরীক্ষাগুলিকে প্যারামিটারাইজ করতে পারেন। জাভা এর জন্য: @ পরিমিতিযুক্ত , জুনিতপ্যারামস , জোহাক
পাইওট্রিক

3

হ্যাঁ, প্রতিটি ইনপুট পরিবর্তনের জন্য একাধিক পরীক্ষা করুন।

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

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

তবে ইতিহাস দেখিয়েছে যে কোড পড়ার / ব্যবহারের ব্যয়ে অল্প সময় লেখার কোড সংরক্ষণ করা কখনই উপযুক্ত নয়। সুতরাং গাইডলাইন।


1

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

JUnit এর সাথে টেস্ট করার সময় আমরা একই পরীক্ষার পদ্ধতির মধ্যে অন্যের থেকে পৃথক পৃথক পৃথক স্ট্রিং আর্গুমেন্ট সহ দাবী * পদ্ধতির সংস্করণ ব্যবহার করে এটি পেতে পারি।

self.assertEqual("just minutes", parse_date('5m'), 5)
self.assertEqual("just hours", parse_date('5h'), 300)
self.assertEqual("just days", ('5d') ,7200)
self.assertEqual("days, hours, minutes", parse_date('1d4h20m'), 1700)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.