সমস্ত ইউনিট পরীক্ষায় আপনার ডেটা হার্ড কোড করা উচিত?


33

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

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

এর অংশ হিসাবে, আমি জাল ডেটাসেটগুলিও তৈরি করছি যা চলমান অ্যাপ্লিকেশনটির ডাটাবেসকে উপস্থাপন করে, যদিও প্রতিটি "সারণীতে" সাধারণত একটি বা দুটি সারি থাকে।

পূর্বনির্ধারিত করা কি কোনও গ্রহণযোগ্য অনুশীলন, যদি সব না হয় তবে সমস্ত ইউনিট পরীক্ষায় সংখ্যাগরিষ্ঠ পরীক্ষার ডেটা?

হালনাগাদ

নীচের মন্তব্যগুলি থেকে মনে হচ্ছে যে আমি ইউনিট পরীক্ষার চেয়ে আরও বেশি সংহত করছি।

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

[TestClass]
public class SetupControllerTests : SetupControllerTestBase {
  [TestMethod]
  public void UserInvite_ExistingUser_DoesntInsertNewUser() {
    // Arrange
    var model = new Mandy.App.Models.Setup.UserInvite() {
      Email = userData.First().Email
    };

    // Act
    setupController.UserInvite(model);

    // Assert
    mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never);
    mockUnitOfWork.Verify(m => m.Commit(), Times.Once);
  }
}

SetupControllerTestBaseমক ইউওডাব্লু তৈরি করছে, এবং তাত্ক্ষণিক করছে userLogic

অনেকগুলি পরীক্ষার জন্য ডাটাবেসে একটি বিদ্যমান ব্যবহারকারী বা পণ্য থাকা প্রয়োজন, তাই আমি মক ইউওডাব্লু কী প্রত্যাবর্তন করে তা প্রাক-জনবসতিযুক্ত করেছি userData, এটি IList<User>একটি একক ব্যবহারকারীর রেকর্ডের সাথে একটি মাত্র is


4
টিউটোরিয়াল / উদাহরণগুলির সমস্যা হ'ল এগুলি সহজ হওয়া দরকার তবে আপনি একটি সাধারণ উদাহরণে জটিল সমস্যার সমাধান দেখাতে পারবেন না। তাদের সাথে "কেস স্টাডি" থাকা উচিত যা বর্ণনা করে যে কীভাবে যুক্তিসঙ্গত আকারের বাস্তব প্রকল্পগুলিতে সরঞ্জামটি ব্যবহৃত হয়, তবে সেগুলি খুব কমই হয়।
জানু হুডেক

আপনি কোডের কিছু ছোট উদাহরণ যুক্ত করতে পারেন যা সম্পর্কে আপনি সম্পূর্ণ খুশি নন।
লুক ফ্রাঙ্কেন

যদি কোনও পরীক্ষা চালানোর জন্য আপনার প্রচুর সেটআপ কোডের প্রয়োজন হয় তবে আপনি কার্যকরী পরীক্ষা চালানোর ঝুঁকিপূর্ণ। আপনি কোড পরিবর্তন করার সময় যদি পরীক্ষাটি ব্যর্থ হয় তবে কোডটিতে কোনও ভুল নেই। এটি অবশ্যই কার্যকরী পরীক্ষা।
বিক্রিয়

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

এই নিবন্ধটি সহায়ক হতে পারে: yegor256.com/2015/05/25/unit-test-scaffolding.html
ইয়েগোর 256

উত্তর:


25

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

আমি স্ট্যান্ডার্ড টেস্টহেল্প ক্লাস করার পদ্ধতিকে ব্যবহার করি যা আমি নিয়মিতভাবে ব্যবহার করি এমন প্রচুর ডেটা টাইপ দেয় যা আমার পরীক্ষাগুলির জন্য জিজ্ঞাসা করতে এবং প্রতিটি সময় আমি কী পেতে পারি তা জানতে আমি স্ট্যান্ডার্ড সত্তা বা ডিটিও ক্লাসের সেট তৈরি করতে পারি। সুতরাং আমি TestHelper.GetFooRange( 0, 100 )তাদের সমস্ত নির্ভরশীল শ্রেণি / ক্ষেত্র সেট সহ 100 ফু অবজেক্টের ব্যাপ্তি পেতে কল করতে পারি।

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

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

ইউনিট পরীক্ষায় যদিও কিছু বিষয় সাবধান হতে হবে:

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

10

যাইহোক আপনার পরীক্ষার অভিপ্রায়টিকে আরও পঠনযোগ্য করে তোলে।

থাম্বের একটি সাধারণ নিয়ম হিসাবে:

যদি ডেটা পরীক্ষার অংশ হয় (উদাহরণস্বরূপ 7 টি রাজ্যের সাথে সারিগুলি মুদ্রণ করা উচিত নয়) তবে পরীক্ষায় এটি কোড করুন, যাতে লেখকটি কী ঘটতে চেয়েছিল তা পরিষ্কার হয়ে যায়।

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

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


+1 আমি সম্মত ইউনিট পরীক্ষার জন্য দৃ he়ভাবে মিলিত হয়ে তিনি যা যা পরীক্ষা করছেন তা এটির মতো গন্ধ হয়।
বিক্রিয়

5

পরীক্ষার বিভিন্ন পদ্ধতি

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

যদি আপনার ইউনিট পরীক্ষাগুলি ভাল হয় তবে আপনাকে ইন্টিগ্রেশন টেস্টিং করার সময় সমস্ত বিবরণ পরীক্ষার পুনরাবৃত্তি করতে হবে না।

শর্তাদি আমরা ব্যবহার করি, সেগুলি কিছুটা প্ল্যাটফর্ম নির্ভর, তবে আপনি এগুলি প্রায় সব পরীক্ষার / বিকাশ প্ল্যাটফর্মে খুঁজে পেতে পারেন:

উদাহরণ প্রয়োগ

প্রযুক্তির উপর নির্ভর করে আপনি নামগুলি ব্যবহার করতে পারেন ভিন্ন হতে পারে, তবে আমি এটি উদাহরণ হিসাবে ব্যবহার করব:

আপনার কাছে যদি মডেল পণ্য, পণ্যাদি নিয়ন্ত্রণকারী এবং একটি সূচক ভিউ যা পণ্যগুলির সাথে একটি এইচটিএমএল টেবিল তৈরি করে তার সাথে একটি সাধারণ CRUD অ্যাপ্লিকেশন থাকে:

অ্যাপ্লিকেশনটির শেষ ফলাফলটি সক্রিয় রয়েছে এমন সমস্ত পণ্যের একটি তালিকা সহ একটি এইচটিএমএল টেবিল দেখাচ্ছে।

অংশ পরিক্ষাকরণ

মডেল

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

তারপরে আমরা আমাদের পরীক্ষা চালাই, উদাহরণস্বরূপ: টেস্টগেটএলএ্যাকটিভ পণ্য।

সুতরাং আমরা একটি পরীক্ষা ডাটাবেস সরাসরি পরীক্ষা। আমরা ডেটাসোর্সকে উপহাস করি না; আমরা সবসময় একই। এটি আমাদের উদাহরণস্বরূপ ডাটাবেসের একটি নতুন সংস্করণ দিয়ে পরীক্ষা করার অনুমতি দেয় এবং যে কোনও প্রশ্নের প্রশ্ন সামনে আসবে।

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

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

class ProductModel {
  public function getAllActive() {
    return $this->find('all', array('conditions' => array('active' => 1)));
  }
}

নিয়ামক

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

সুতরাং আমরা মডেল পদ্ধতিটি getAllActive () কে উপহাস করব এবং এতে স্থির ডেটা যুক্ত করব (উদাহরণস্বরূপ দুটি রেকর্ড)। এখন আমরা নিয়ন্ত্রণকারীর দর্শনে যে ডেটা প্রেরণ করা হয় তা পরীক্ষা করি এবং আমরা যদি সত্যিই এই দুটি রেকর্ড ফিরে পাই তবে তুলনা করি।

function testProductIndexLoggedIn() {
  $this->setLoggedIn();
  $this->ProductsController->mock('ProductModel', 'index', function(return array(your records) ));
  $result=$this->ProductsController->index();
  $this->assertEquals(2, count($result['products']));
}

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

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

class ProductsController {
  public function index() {
    if($this->loggedIn()) {
      $this->set('products', $this->ProductModel->getAllActive());
    }
  }
}

দেখেছে

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

তারপরে আমাদের কিছু প্রকল্প নির্দিষ্ট মতামত রয়েছে। আমরা সেগুলি পরীক্ষা করি না। এটি ইউনিট পরীক্ষা করা সত্যই পছন্দসই নয়। আমরা তাদের একীকরণ পরীক্ষার জন্য রাখি। কারণ আমরা এখানে প্রচুর কোড দর্শনে নিয়েছি আমাদের এখানে ঝুঁকি কম।

আপনি যদি পরীক্ষাগুলি শুরু করেন তবে প্রতিবার আপনার এইচটিএমএলের একটি অংশ পরিবর্তন করার দরকার রয়েছে যা বেশিরভাগ প্রকল্পের জন্য কার্যকর নয়।

echo $this->tableHelper->generateHtmlTableFromArray($products);

ইন্টিগ্রেশন টেস্টিং

আপনার প্ল্যাটফর্মের উপর নির্ভর করে আপনি ব্যবহারকারীদের গল্পগুলির সাথে কাজ করতে পারেন ইত্যাদি etc. এটি সেলেনিয়াম বা অন্যান্য তুলনামূলক সমাধানগুলির মতো ওয়েবভিত্তিক হতে পারে ।

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

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

হার্ড কোডড ডেটা ফিক্সচারে সংরক্ষণ করা হয়।

function testIntegrationProductIndexLoggedIn() {
  $this->setLoggedIn();
  $result=$this->request('products/index');

  $expected='<table';
  $this->assertContains($expected, $result);

  // Some content from the fixture record
  $expected='<td>Product 1 name</td>';
  $this->assertContains($expected, $result);
}

সম্পূর্ণ ভিন্ন প্রশ্নের উত্তর এটি একটি দুর্দান্ত উত্তর।
পিডিআর

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

অন্যান্য শ্রেণীর সমস্ত ধরণের কল না করে কীভাবে পরীক্ষা করতে হয় তা বোঝাতে কিছু কোড উদাহরণ সহ উত্তরটি আপডেট করা হয়েছে।
লুক ফ্রাঙ্কেন

4

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

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

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

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


-1

আমি মনে করি আপনার পরীক্ষার জন্য বেশিরভাগ ডেটা হার্ড কোড করা খুব সাধারণ।

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

পূর্বনির্ধারিত পরীক্ষার ডেটা আপনাকে এমন একটি ডেটা সেট তৈরি করতে দেয় যা পরিস্থিতিতে বিস্তৃত এবং জ্ঞাত পরিসীমা জুড়ে covers

এটি বলেছিল, আমি মনে করি আপনার পরীক্ষায় কিছু এলোমেলো ডেটা রাখারও মূল্য রয়েছে is


আপনি কি সত্যিই শিরোনামটি না করে প্রশ্নটি পড়েছেন?
Jakob

আপনার পরীক্ষায় কিছু এলোমেলো তথ্য থাকার মান - হ্যাঁ, কারণ প্রতি সপ্তাহে একবারে ব্যর্থ হওয়ার সাথে সাথে পরীক্ষায় কী ঘটেছিল তা বের করার চেষ্টা করার মতো কিছুই নেই nothing
পিডিআর

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