পরীক্ষার অধীনে ক্লাসের জাল অংশটি কি ঠিক আছে?


22

মনে করুন আমার একটি শ্রেণি রয়েছে (এর অনুষঙ্গী উদাহরণ এবং এর খারাপ নকশাটি ক্ষমা করুন):

class MyProfit
{
  public decimal GetNewYorkRevenue();
  public decimal GetNewYorkExpenses();
  public decimal GetNewYorkProfit();

  public decimal GetMiamiRevenue();
  public decimal GetMiamiExpenses();
  public decimal GetMiamiProfit();

  public bool BothCitiesProfitable();

}

(গেটক্সএক্সএক্সআরউইউনো () এবং গেটএক্সএক্সএক্সএক্সপেনসেস () পদ্ধতিগুলির মধ্যে নির্ভরশীলতা রয়েছে যা স্টাব আউট রয়েছে)

এখন আমি টুথটিসিটি প্রফাইটেবল () যা ইউনিভার্সিটি নিউইয়র্ক ইয়র্কপ্রফিট () এবং গেটমায়ামিপ্রোফিট () এর উপর নির্ভরশীল সেগুলির পরীক্ষা করছি। গেটনিউইয়র্কপ্রোফিট () এবং গেটমিয়ামিপ্রোফিট () কে আটকানো কি ঠিক আছে?

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

এখন পর্যন্ত আমি কেবল অভ্যন্তরীণ পদ্ধতি নয় বরং বহিরাগত শ্রেণির উপর নির্ভরশীলতার ঝুঁকির উদাহরণ দেখেছি।

এবং যদি এটি ঠিক থাকে তবে আমার এটি করার জন্য কোনও বিশেষ প্যাটার্ন ব্যবহার করা উচিত?

হালনাগাদ

আমি উদ্বিগ্ন যে আমরা সম্ভবত মূল সমস্যাটি মিস করছি এবং এটি সম্ভবত আমার দুর্বল উদাহরণের দোষ। মৌলিক প্রশ্নটি হ'ল: যদি কোনও শ্রেণীর কোনও পদ্ধতির যদি একই শ্রেণিতে অন্য প্রকাশ্য উদ্ভাসিত পদ্ধতির উপর নির্ভরশীলতা থাকে তবে এটি অন্য পদ্ধতিটি আটকানো ঠিক আছে (বা এমনকি প্রস্তাবিতও)?

হয়তো আমি কিছু মিস করছি, তবে আমি নিশ্চিত না যে ক্লাসে বিভক্ত হওয়া সর্বদা বোধগম্য হয়। সম্ভবত আরও ন্যূনতম ভাল উদাহরণ হতে পারে:

class Person
{
 public string FirstName()
 public string LastName()
 public string FullName()
}

যেখানে পুরো নামটি সংজ্ঞায়িত করা হয়েছে:

public string FullName()
{
  return FirstName() + " " + LastName();
}

ফুলনেম () পরীক্ষা করার সময় ফার্স্টনেম () এবং লাস্টনাম () ঠাট্টা করা কি ঠিক আছে?


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

আপনার আপডেট সম্পর্কে
সবেমাত্র

উত্তর:


27

আপনার প্রশ্নে ক্লাস ভেঙে দেওয়া উচিত।

প্রতিটি শ্রেণীর কিছু সহজ কাজ করা উচিত। যদি আপনার কাজটি পরীক্ষা করা খুব জটিল হয় তবে ক্লাসটি যে কাজটি করে তা খুব বড়।

এই নকশার বোকামি উপেক্ষা:

class NewYork
{
    decimal GetRevenue();
    decimal GetExpenses();
    decimal GetProfit();
}


class Miami
{
    decimal GetRevenue();
    decimal GetExpenses();
    decimal GetProfit();
}

class MyProfit
{
     MyProfit(NewYork new_york, Miami miami);
     boolean bothProfitable();
}

হালনাগাদ

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

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

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

দ্বিতীয় প্রশ্নটি কেন আপনি এটি করার প্রয়োজন বোধ করেন। আপনার সমস্ত ব্যক্তি শ্রেণির পরেও এরকম কিছু পরীক্ষা করা যেতে পারে:

Person person = new Person("John", "Doe");
Test.AssertEquals(person.FullName(), "John Doe");

এই উদাহরণের জন্য আপনার প্রয়োজনীয় স্টাবের কিছু অনুভব করা উচিত নয়। যদি আপনি তা করেন তবে আপনি দৃub়-খুশি এবং ভাল ... এটি বন্ধ করুন! সেখানকার পদ্ধতিগুলিকে উপহাস করার কোনও সুবিধা নেই কারণ যেভাবে যাইহোক সেগুলির মধ্যে যা আছে তা আপনি নিয়ন্ত্রণ পেয়েছেন।

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

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

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

আবার আপডেট করুন

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

এখন অভ্যন্তরীণ আচরণ পরীক্ষা করা হয়েছে, কারণ এটিই বাহ্যিক আচরণের ফলাফল। তবে আমি কেবল অভ্যন্তরীণ আচরণের উপর সরাসরি পরোক্ষভাবে বাহ্যিক আচরণের মাধ্যমে পরীক্ষা লিখি না।

আমি যদি কিছু পরীক্ষা করতে চাই তবে আমি অনুভব করি যে এটি স্থানান্তরিত হওয়া উচিত যাতে এটি বাহ্যিক আচরণে পরিণত হয়। সে কারণেই আমি মনে করি আপনি যদি কিছু উপহাস করতে চান তবে আপনার অবজেক্টটি বিভক্ত করা উচিত যাতে আপনি যে জিনিসটিকে উপহাস করতে চান সেটি এখন প্রশ্নযুক্ত বস্তুর বাইরের আচরণে।

তবে, এতে কী পার্থক্য রয়েছে? ফার্স্টনাম () এবং লাস্টনাম () যদি অন্য কোনও অবজেক্টের সদস্য হয় তবে কী এটি সত্যই পুরো নামটির সমস্যা পরিবর্তন করে ()? যদি আমরা সিদ্ধান্ত নিই যে ফার্স্টনাম এবং লাস্টনামের উপহাস করা প্রয়োজন তবে তাদের পক্ষে অন্য কোনও বস্তুতে থাকতে সহায়তা করা কি?

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

সম্পাদনা

আসুন আমরা এক পদক্ষেপ নেব এবং জিজ্ঞাসা করব: পরীক্ষা করার সময় আমরা কেন বস্তুগুলি উপহাস করি?

  1. পরীক্ষাগুলি ধারাবাহিকভাবে চালিত করুন (রান থেকে চালাতে পরিবর্তিত জিনিসগুলিতে অ্যাক্সেস এড়িয়ে চলুন)
  2. ব্যয়বহুল সংস্থান অ্যাক্সেস এড়িয়ে চলুন (তৃতীয় পক্ষের পরিষেবাগুলিতে আঘাত করবেন না) etc.
  3. পরীক্ষার অধীনে সিস্টেমটি সরল করুন
  4. সমস্ত সম্ভাব্য পরিস্থিতি পরীক্ষা করা সহজ করুন (যেমন ব্যর্থতার অনুকরণের মতো জিনিসগুলি)
  5. কোডের অন্যান্য টুকরাগুলির বিশদের উপর নির্ভর করে এড়িয়ে চলুন যাতে কোডের অন্যান্য টুকরাগুলির পরিবর্তনগুলি এই পরীক্ষাটি ভাঙ্গবে না।

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

আমি মনে করি আপনার উদ্বেগ কারণ 5 নম্বর। উদ্বেগ হ'ল ভবিষ্যতে কোন এক সময় ফার্স্টনাম এবং লাস্টনামের প্রয়োগটি পরীক্ষাটি ভেঙে দেবে। ভবিষ্যতে ফার্স্টনাম এবং লাস্টনাম কোনও আলাদা অবস্থান বা উত্স থেকে নামগুলি পেতে পারে। তবে ফুলনেম সম্ভবত সর্বদা থাকবে FirstName() + " " + LastName()। এজন্য আপনি ফার্স্টনাম এবং লাস্টনামকে উপহাস করে পূর্ণ নাম পরীক্ষা করতে চান।

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

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

আমি সন্দেহ করি আপনি নিজের আপত্তিটি বিভক্ত করতে আপত্তি করতে পারেন তবে কেন?

সম্পাদনা

আমি ভৃল ছিলাম.

আপনার পৃথক পদ্ধতিগুলিকে ঠাট্টা করে অ্যাড-হক বিভক্তকরণের পরিবর্তে আপনার বস্তুগুলি বিভক্ত করা উচিত। যাইহোক, আমি বস্তুর বিভাজনের এক পদ্ধতিতে অত্যধিক দৃষ্টি নিবদ্ধ করেছিলাম। তবে ওও কোনও বস্তুর বিভাজনের একাধিক পদ্ধতি সরবরাহ করে methods

আমি কি প্রস্তাব করব:

class PersonBase
{
      abstract sring FirstName();
      abstract string LastName();

      string FullName()
      {
            return FirstName() + " " + LastName();
      }
 }

 class Person extends PersonBase
 {
      string FirstName(); 
      string LastName();
 }

 class FakePerson extends PersonBase
 {
      void setFirstName(string);
      void setLastName(string);
      string getFirstName();
      string getLastName();
 }

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

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


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

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

আমার ক্ষেত্রে "ফার্স্টনাম ()" এবং "লাস্টনাম ()" পদ্ধতিগুলি সহজ তবে তারা তাদের ফলাফলের জন্য তৃতীয় পক্ষের এপিআই সম্পর্কে জিজ্ঞাসাবাদ করে।
ব্যবহারকারী

@ ব্যবহারকারী, আপডেট হওয়া, তাত্ক্ষণিকভাবে আপনি ফার্স্টনাম এবং লাস্টনাম পরীক্ষা করার জন্য তৃতীয় পক্ষের এপিআইকে উপহাস করছেন। ফুলনাম পরীক্ষা করার সময় একই বিদ্রূপ করার ক্ষেত্রে কী ভুল?
উইনস্টন ইওয়ার্ট

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

10

যদিও আমি উইনস্টন ইওয়ার্টের উত্তরের সাথে একমত, কখনও কখনও ক্লাস ভেঙে ফেলা সম্ভব নয়, সময়ের সীমাবদ্ধতার কারণে, ইতিমধ্যে অন্য কোথাও এপিআই ব্যবহৃত হচ্ছে বা আপনার কী আছে।

এরকম ক্ষেত্রে, উপহাসের পদ্ধতির পরিবর্তে, ক্লাসটি ক্রমবর্ধমানভাবে কভার করার জন্য আমি আমার পরীক্ষাগুলি লিখি। পরীক্ষা করুন getExpenses()এবং getRevenue()পদ্ধতি তারপর পরীক্ষা, getProfit(), পদ্ধতি তারপর ভাগ পদ্ধতি পরীক্ষা। এটি সত্য যে কোনও নির্দিষ্ট পদ্ধতিতে আপনার একাধিক পরীক্ষা হবে, তবে যেহেতু আপনি পৃথকভাবে পদ্ধতিগুলি কভার করার জন্য পাসিং পরীক্ষাগুলি লিখেছেন, তাই আপনি নিশ্চিত হতে পারেন যে পরীক্ষিত ইনপুট প্রদানে আপনার ফলাফলগুলি নির্ভরযোগ্য।


1
একমত। তবে যে কেউ এই পড়েন তার জন্য কেবলমাত্র পয়েন্টটির উপর জোর দেওয়ার জন্য, আপনি যদি আরও ভাল সমাধান না করতে পারেন তবে এটিই আপনি সমাধান করুন।
উইনস্টন ইওয়ার্ট

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

@ পেটার টার্ক, ভালো কথা। যদিও আমি মনে করি এটি "আরও ভাল সমাধান করতে পারে না" এর আওতাভুক্ত। :)
উইনস্টন ইওয়ার্ট

@ getProfit () পদ্ধতিটি পরীক্ষা করা খুব কঠিন হবে কারণ getExpenses () এবং getRevenues () এর জন্য বিভিন্ন পরিস্থিতিতে বিভিন্নভাবে বাস্তবায়ন করা getProfit () এর জন্য প্রয়োজনীয় পরিস্থিতিতে বহুগুণে বৃদ্ধি পাবে। যদি আমরা getExpenses () পরীক্ষা করি এবং স্বাধীনভাবে উপার্জন () পাই তবে getProfit () পরীক্ষার জন্য এই পদ্ধতিগুলি উপহাস করা কি ভাল ধারণা নয়?
মোহাম্মদ ফরিদ

7

আপনার উদাহরণগুলিকে আরও সরল করতে, আপনি পরীক্ষা করছেন C(), যা উপর নির্ভর করে A()এবং B()যার প্রত্যেকটির নিজস্ব নির্ভরতা রয়েছে। আপনার পরীক্ষাটি কী অর্জন করার চেষ্টা করছে তা আইএমওতে নেমে আসে।

আপনি আচরণকে পরীক্ষা করছি তাহলে C()প্রদত্ত পরিচিত আচরণে A()এবং B()এটি সম্ভবত সবচেয়ে সহজ পদ্ধিতি হল এবং শ্রেষ্ঠ আউট শহরের উপর অসম্পূর্ণ নিবন্ধ হয় A()এবং B()। একে সম্ভবত পিউরিস্টদের দ্বারা ইউনিট পরীক্ষা বলা হবে।

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

উভয় পন্থা বৈধ হতে পারে, সুতরাং এটি যদি এমনভাবে তৈরি করা হয় যাতে আপনি উভয় দিক দিয়ে এটি পরীক্ষা করতে পারেন তবে সম্ভবত এটি দীর্ঘকালীন ক্ষেত্রে আরও ভাল।

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