সেরা অনুশীলন: JUnit শ্রেণীর ক্ষেত্রগুলি সেটআপ () বা ঘোষণার সময় চালু করুন?


120

আমি কি এই জাতীয় ঘোষণায় ক্লাস ফিল্ডগুলি আরম্ভ করব?

public class SomeTest extends TestCase
{
    private final List list = new ArrayList();

    public void testPopulateList()
    {
        // Add stuff to the list
        // Assert the list contains what I expect
    }
}

অথবা সেটআপে () এর মতো?

public class SomeTest extends TestCase
{
    private List list;

    @Override
    protected void setUp() throws Exception
    {
        super.setUp();
        this.list = new ArrayList();
    }

    public void testPopulateList()
    {
        // Add stuff to the list
        // Assert the list contains what I expect
    }
}

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

স্পষ্টতা: JUnit পরীক্ষা পদ্ধতিতে একবার পরীক্ষা ক্লাস ইনস্ট্যান্ট করবে। এর অর্থ listপরীক্ষায় প্রতি একবার তৈরি করা হবে, আমি যেখানেই এটি ঘোষণা করি না কেন। এর অর্থ হল পরীক্ষাগুলির মধ্যে কোনও অস্থায়ী নির্ভরতা নেই। সুতরাং দেখে মনে হচ্ছে সেটআপ () ব্যবহার করার কোনও সুবিধা নেই। তবে JUnit FAQ এর অনেকগুলি উদাহরণ রয়েছে যা সেটআপ () এ একটি খালি সংগ্রহ শুরু করে, তাই আমি বুঝতে পারি যে এর কোনও কারণ থাকতে হবে।


2
সতর্ক থাকুন যে উত্তরটি ইউনাইট 4 (ঘোষণার সূচনা) এবং জুনিট 3 (সেটআপ ব্যবহার করুন) -এর মধ্যে পৃথক হয়েছে; এই বিভ্রান্তির মূল।
নিলস ভন বার্থ

উত্তর:


99

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

JUnit উদাহরণস্বরূপ সেটআপ পদ্ধতিতে একটি অ্যারেলিস্ট তৈরি করা হয়, তারা সকলেই সেই টেস্টইন্ডেক্সআউটঅফবাউন্ডএক্সেপশন, টেস্টঅ্যাম্পিটি কালেকশন এবং এর মতো ক্ষেত্রে এই অ্যারেলিস্টের আচরণ পরীক্ষা করে। সেখানকার দৃষ্টিকোণটি কেউ ক্লাস লেখার এবং এটি সঠিকভাবে কাজ করে তা নিশ্চিত করার বিষয়ে।

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

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

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


45

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

এগুলির কোনওটিই খালি সংগ্রহ তৈরির উদাহরণটিতে প্রযোজ্য না, যেহেতু এটি কখনই ফেলবে না, তবে এটি setUp()পদ্ধতির সুবিধা ।


18

অ্যালেক্স বি এর উত্তর ছাড়াও।

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

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

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

জীবন চক্র JUnits:

  1. প্রতিটি পরীক্ষার পদ্ধতির জন্য আলাদা টেস্টক্লাস উদাহরণ তৈরি করুন
  2. প্রতিটি টেস্টক্লাস উদাহরণের জন্য পুনরাবৃত্তি করুন: কল সেটআপ + কল করুন টেস্টমেডথেকে

দুটি পরীক্ষার পদ্ধতিতে পরীক্ষায় কিছু লগিং সহ আপনি পান: (সংখ্যাটি হ্যাশকোড)

  • নতুন উদাহরণ তৈরি করা হচ্ছে: 5718203
  • নতুন উদাহরণ তৈরি করা হচ্ছে: 5947506
  • সেটআপ: 5718203
  • টেস্টওন: 5718203
  • সেটআপ: 5947506
  • টেস্টটিউ: 5947506

3
সঠিক, কিন্তু বিষয় বন্ধ। ডাটাবেসটি মূলত বিশ্ব রাষ্ট্র state এটি আমার কোনও সমস্যা নয়। আমি নিখুঁতভাবে সঠিকভাবে স্বাধীন পরীক্ষাগুলির সম্পাদনের গতির সাথে উদ্বিগ্ন।
ক্রেগ পি। মোটলিন

এই ইনিশিয়ালাইজেশন ক্রমটি কেবলমাত্র ইউনাইট 3 এ সত্য, যেখানে এটি একটি গুরুত্বপূর্ণ সতর্কতা। JUnit 4 পরীক্ষার দৃষ্টান্ত অলসভাবে তৈরি করা হয়, তাই ঘোষণার সূচনা বা সেটআপ পদ্ধতিতে উভয়ই পরীক্ষার সময় ঘটে। এছাড়াও এককালীন সেটআপের জন্য, @BeforeClassজুনেট ৪-এ ব্যবহার করতে পারবেন
নীলস ভন বার্থ

11

জুন 4 এ:

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

কোনও @Beforeপদ্ধতি বা পরীক্ষা পদ্ধতিতে আরম্ভ করা আপনাকে ব্যর্থতার বিষয়ে আরও ভাল ত্রুটি প্রতিবেদন করতে দেয়। এটি বিশেষত ক্লাস আন্ডার টেস্টটি ইনস্ট্যান্ট করার জন্য দরকারী (যা আপনি ভেঙে যেতে পারেন) তবে বাহ্যিক সিস্টেমে কল করার জন্যও এটি দরকারী যেমন ফাইল সিস্টেম অ্যাক্সেস ("ফাইলটি পাওয়া যায় নি") বা একটি ডেটাবেসে সংযোগ করার জন্য ("সংযোগ অস্বীকৃত")।

এটি একটি সাধারণ স্ট্যান্ডার্ড এবং সর্বদা ব্যবহারযোগ্য বলে গ্রহণযোগ্য@Before ঘোষণায় (স্পষ্ট ত্রুটি কিন্তু বাগাড়ম্বরপূর্ণ) অথবা সবসময় আরম্ভ (সংক্ষিপ্ত কিন্তু বিভ্রান্তিকর ত্রুটি দেয়), যেহেতু জটিল কোডিং নিয়ম অনুসরণ করা কঠিন, এবং এই একটি বড় চুক্তি হয় না।

ইনিশিয়েট করা setUpহ'ল জুনিট 3-এর একটি প্রতীক, যেখানে সমস্ত পরীক্ষার দীক্ষাগুলি আগ্রহের সাথে শুরু করা হয়েছিল, যা আপনি ব্যয়বহুল সূচনা করলে সমস্যা (গতি, স্মৃতি, সংস্থান নিঃসরণ) সৃষ্টি করে। সুতরাং সেরা অনুশীলনটি ছিল ব্যয়বহুল সূচনাতে setUpযা পরীক্ষা চালানো হয় কেবল তখনই চালানো হত। এটি আর প্রযোজ্য নয়, সুতরাং এটি ব্যবহার করা খুব কম প্রয়োজন setUp

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


7

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

নোট করুন যে JUnit 4-এ, পরীক্ষা চলার ঠিক আগে টেস্ট অবজেক্টের সূচনা ঘটে এবং তাই ফিল্ড ইনিশিয়ালাইজার ব্যবহার করা নিরাপদ এবং প্রস্তাবিত স্টাইল।


মজাদার. সুতরাং আপনি প্রথমে বর্ণিত আচরণটি কেবল জুনট 3-এ প্রযোজ্য?
ক্রেগ পি মোটলিন

6

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


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

@ ওলাফ কোডিং স্ট্যান্ডার্ড সম্পর্কে তথ্যের জন্য ধন্যবাদ, আমি এটি সম্পর্কে ভেবে দেখিনি। আমি যদিও কোডিং স্ট্যান্ডার্ড সম্পর্কে ম্যাস কলামের ধারণার সাথে একমত হই।
ক্রেগ পি মোটলিন

5

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

@BeforeClassসেটআপ পদ্ধতিটি ব্যবহার করে অপ্টিমাইজেশনের উদাহরণ : আমি কিছু ডাটাবেস ফাংশনাল পরীক্ষার জন্য ডাবুনিট ব্যবহার করি। সেটআপ পদ্ধতিটি পরিচিত অবস্থায় ডাটাবেস রাখার জন্য দায়ী (খুব ধীর ... 30 সেকেন্ড - ডেটার পরিমাণের উপর নির্ভর করে 2 মিনিট)। আমি @BeforeClassপ্রতিটি ডেটাবেসকে পুনরায় লোডিং / আরম্ভের বিপরীতে একই সেট ডেটার বিপরীতে 10-20 টি টেস্ট চালিত সেটআপ পদ্ধতিতে এই ডেটাটি লোড করি এবং তারপরে 10-20 টি টেস্ট চালিয়ে যাই ।

জুনিট ৩.৮ ব্যবহার করে (আপনার উদাহরণে যেমন টেস্টকেস প্রসারিত করা হয়েছে) কেবলমাত্র একটি টীকা যুক্ত করার চেয়ে আরও কিছু কোড রচনা করা দরকার তবে "ক্লাস সেটআপের আগে একবার চালানো" এখনও সম্ভব is


1
+1 কারণ আমিও পঠনযোগ্যতা পছন্দ করি। তবে, আমি নিশ্চিত নই যে দ্বিতীয় উপায়টি একেবারে একটি অপ্টিমাইজেশন।
ক্রেগ পি মোটলিন

আপনি কীভাবে সেটআপ দিয়ে অপ্টিমাইজ করতে পারবেন তা পরিষ্কার করার জন্য @ মটলিন আমি dbunit উদাহরণ যুক্ত করেছি।
অ্যালেক্স বি

ডাটাবেসটি মূলত বিশ্ব রাষ্ট্র state সুতরাং ডিবি সেটআপটিকে সেটআপ () এ সরিয়ে নেওয়া কোনও অপ্টিমাইজেশন নয়, পরীক্ষাগুলি সঠিকভাবে সম্পন্ন করা প্রয়োজন।
ক্রেগ পি। মোটলিন

@ অ্যালেক্স বি: যেমন মোটলিন বলেছেন, এটি কোনও অপ্টিমাইজেশন নয়। কোডটিতে প্রাথমিককরণটি কোথায় করা হয়েছে আপনি কেবল তা পরিবর্তন করছেন, তবে কত বার বা কত তাড়াতাড়ি নয়।
এডি

আমি "@ বিফোরক্লাস" টীকাটি বোঝানোর ইচ্ছা নিয়েছিলাম। স্পষ্ট করে উদাহরণ সম্পাদনা করা হচ্ছে।
অ্যালেক্স বি

2

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

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

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

আপনার ক্ষেত্রে, যেখানে আপনি কেবল একটি খালি তালিকা তৈরি করছেন, আমি আপনার পরামর্শ মতোই করব: ঘোষণার পয়েন্টে নতুন তালিকা বরাদ্দ করুন। বিশেষত কারণ finalআপনার পরীক্ষার শ্রেণীর জন্য এটি যদি অর্থবোধ করে তবে আপনার কাছে এটি চিহ্নিত করার বিকল্প রয়েছে ।


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

@ মটলিন: সত্য, স্ট্যাটিক ভেরিয়েবলগুলির স্টাফ কিছুটা অফ-টপিক। আমি কেন এটি যুক্ত করেছিলাম তা নিশ্চিত নই, তবে আমি এটি প্রথম অনুচ্ছেদে যা বলছিলাম তার একটি বর্ধনের সময় উপযুক্ত মনে হয়েছিল।
এডি 17

যদিও সুবিধাটি finalপ্রশ্নে উল্লেখ করা হয়েছে।
নিলস ভন বার্থ

0
  • ধ্রুবক মানগুলি (ফিক্সচার বা দৃser়তার মধ্যে ব্যবহৃত) তাদের ঘোষণায় আরম্ভ করা উচিত এবং final(কখনই পরিবর্তন হয় না)

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

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

উপহাসের উপর নির্ভরশীলতা ছাড়াই একটি পরীক্ষা দেখতে পাওয়া যেতে পারে:

public class SomeTest {

    Some some; //instance under test
    static final String GENERIC_ID = "123";
    static final String PREFIX_URL_WS = "http://foo.com/ws";

    @Before
    public void beforeEach() {
       some = new Some(new Foo(), new Bar());
    } 

    @Test
    public void populateList()
         ...
    }
}

বিচ্ছিন্ন করার জন্য নির্ভরতাগুলির সাথে একটি পরীক্ষা দেখতে পাওয়া যেতে পারে:

@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public class SomeTest {

    Some some; //instance under test
    static final String GENERIC_ID = "123";
    static final String PREFIX_URL_WS = "http://foo.com/ws";

    @Mock
    Foo fooMock;

    @Mock
    Bar barMock;

    @Before
    public void beforeEach() {
       some = new Some(fooMock, barMock);
    }

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