আপনি কীভাবে এমন কোডের জন্য পরীক্ষাগুলি লিখবেন যা কংক্রিট বাহ্যিক বাস্তবায়নের উপর নির্ভর করে যা উপহাস করা যায় না?


17

পটভূমি: আমি যে মডিউলে কাজ করছি তার জন্য কিছু তৈরি করে আমার সহকর্মীদের কাছে ইউনিট পরীক্ষার ধারণাটি চালু করার চেষ্টা করার কথা ভাবছি; এর প্রয়োজনীয়তাগুলি সম্প্রতি পরিবর্তিত হয়েছে এবং আরও কিছু বিমূর্ততা / মিথস্ক্রিয়াগুলির প্রয়োজন রয়েছে যাতে এটি পরীক্ষার স্যুট বিকাশের একটি ভাল পদ্ধতির মতো বলে মনে হয় যা অ্যাপ্লিকেশনটির চারপাশে ঝাঁকুনি না করেই "প্রমাণিত" হয়ে কাজ করে।

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

এর মতো পরিস্থিতিতে আমি তথ্যটি সঠিক এবং আমি তৈরি করতে পারি তা নিশ্চিত করার জন্য ইউনিট পরীক্ষাগুলির উপর নজর দেওয়া উচিত পিডিএফ , বা সেগুলিকে মার্জ করতে পারি, বা যা কিছু করতে পারি এবং প্রকৃত প্রদর্শনের সমস্যাগুলির জন্য ম্যানুয়াল পরীক্ষার অবলম্বন করতে পারি?


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

2
আমি "আনমকেবল" কিনছি না। আমি মেনে নেব "যে আমি কীভাবে উপহাস করতে জানি না", যার অর্থ হ'ল আপনার আসল প্রশ্নটি "আমি কীভাবে এটি উপহাস করব?"।
রেন হেনরিচস 20'11

সম্ভবত :) আমি ব্যবহৃত এক্সএমএলকে উপহাস করার সাথে পরিচিত, তবে ফর্ম্যাটিংয়ের ক্ষেত্রে কোনও আসল পিডিএফ বা এইচটিএমএল নথি কীভাবে উপহাস করা যায় তা নিয়ে নয় with
ওয়েইন মোলিনা

1
আমার মনে হয় আপনি "ফাংশনাল" (অ্যাপ্লিকেশন শেষ থেকে শেষ) বা "সিস্টেম" (একাধিক অ্যাপ্লিকেশন শেষ হতে হবে) পরীক্ষাগুলি বোঝায়
গ্যারি রোয়ে

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

উত্তর:


13

বৈশিষ্ট্যটি ইউনিট নয় পরীক্ষা করুন

পরিচিত এক্সএমএল ইনপুট ব্যবহার করে একটি পিডিএফ আউটপুট করুন এবং ম্যানুয়ালি (এবং সাবধানে) যাচাই করুন যে এটি সঠিক। তারপরে এটি রেফারেন্স হিসাবে সংরক্ষণ করুন।

একই এক্সএমএল ইনপুট ব্যবহার করে ভবিষ্যতের পরীক্ষাগুলি রেফারেন্সের সাথে বাইনারি-ফাইলের তুলনা করতে পারে।

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


+1 কারণ আপনি কেবলমাত্র এই স্তরের চূড়ান্ত ফলাফলের প্রতি আগ্রহী। আপনি কীভাবে পিডিএফ পেয়ে পৌঁছেছেন তার বাস্তবায়ন পরিবর্তন করলে আপনার কার্যকরী পরীক্ষাটি পরিবর্তন করা উচিত নয়।
গ্যারি রোয়ে

2
ভাল পরামর্শের জন্য +1, আমরা আমাদের বর্তমান প্রকল্পে এটি করি। আমরা পিডিএফ তুলনা করার জন্য একটি কাস্টম টুলসেট তৈরি করেছি, যা আমাদের ডকুমেন্টে টাইমস্ট্যাম্পগুলির পরিবর্তিত অংশগুলি বাদ দিতে দেয়। ক্যাভ্যাট: পিডিএফ রেন্ডারারের আলাদা (সংস্করণ) স্যুইচিংয়ের ফলে লেআউটে সূক্ষ্ম পরিবর্তন হতে পারে, যার ফলে মিথ্যা ধনাত্মক সংকেতের হিপগুলির সাথে সরাসরি বাইনারি তুলনা হয়।
পিয়েটার তারেক

5

সাধারণত এর মতো ক্ষেত্রে আপনি কোনও প্রয়োগের পিছনে যা পরীক্ষা করতে পারবেন না এমন সমস্ত কিছু বিমূর্ত করে আপনি কোনও ইন্টারফেস দিয়ে ব্যবহার করতে পারেন। আমি কেবল পিডিএফ বিল্ডারের মতো নির্বোধ কিছু করব কারণ এটি যুক্তিযুক্ত বলে মনে হচ্ছে।

public class PdfBuilder : IPdfBuilder
{
  public byte[] BuildPdf(...)
  {
    // actual untestable code here
  }
}

public interface IPdfBuilder
{
  byte[] BuildPdf(...);
}

তারপরে আপনি যা চান তা করতে আপনার পরীক্ষাগুলিতে আইপিডিএফ বিল্ডারকে উপহাস করতে পারেন। এর অর্থ প্রায়শই আপনাকে আইওসি পাত্রে ব্যবহার শুরু করতে হবে ( /programming/871405/why-do-i-need-an-ioc-container-as-oppised-to-straightforward-di-code এবং /programming/21288/which-net-dependency-injection-frameworks-are-worth-looking-into আপনি যদি এখনই এটি ব্যবহার না করে থাকেন তবে are- হিসাবে জায়গা শুরু করুন)।

এবং যে পরীক্ষাগুলি ইউনিট পরীক্ষা নয় তাদের প্রায়শই সংহতকরণ পরীক্ষা বলা হয় called জটিল ইন্টিগ্রেশন পরীক্ষাগুলি প্রায়শই এটি সম্পূর্ণরূপে মূল্যী হয় না, সুতরাং আপনি কেবল সেই অংশটি বিমূর্ত করেন এবং সেই বিমূর্ততায় ব্যবসায়িক যুক্তির পরিমাণ হ্রাস করেন যাতে আপনি এটি একটি ইউনিট পরীক্ষায় পরীক্ষা করতে পারেন।

এটি সম্পূর্ণ পরিষ্কার না হলে আমাকে জানান know


অকেজোযোগ্য কোড লুকানোর জন্য +1। তারপরে আপনি সঠিক ফলাফল পেতে সেই ইন্টারফেসটি অতিক্রম করার জন্য কী প্রয়োজন এবং আপনি তার জন্য ইউনিট পরীক্ষা না করা পর্যন্ত আপনি ম্যানুয়াল পরীক্ষা করতে পারেন যে সঠিকভাবে তৈরি করা হচ্ছে আপনার রিগ্রেশন ইউনিট পরীক্ষা জন্য।
এথেল ইভান্স

1

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

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


এটি খুব শক্তভাবে মিলিত হয়েছে তবে এটি এমন একটি অঞ্চল যা আমি ঠিক করতে পারছি না কারণ এটিকে আলগাভাবে মিলিত করার জন্য কোনও ক্রয়-ইন নেই এবং কোনও সংস্থানগুলি রিফ্যাক্টরিংয়ের জন্য উত্সর্গীকৃত নয় (তবে এটি সম্পূর্ণ ভিন্ন ইস্যুগুলির সেট)।
ওয়েইন মোলিনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.