ইউনিট টেস্টিং ক্লাসগুলি যাতে অনলাইনে কার্যকারিতা থাকে


23

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

উদাহরণ স্বরূপ:

public class Foo
{
    public int methodA()
    {
         int val = goOnlineToGetVal();

         return val;
    }

    private int goOnlineToGetVal()
    {
        CloudService c = new CloudService();
        int oval = c.getValueFromService();
        return oval;
    }
}

যদি আমি ফাংশনটি পরীক্ষা করে দেখি: 'মেথডএএ ()' এটি 'GoOnlineToGetVal ()' ব্যবহার করার চেষ্টা করবে যা ঘুরেফিরে অনলাইনে যাওয়ার চেষ্টা করবে, যদি এই পরীক্ষাটি কার্যকারিতা ছাড়াই করা হয়। অনলাইনে না গিয়ে আমি কীভাবে প্রায় 100% ক্লাস কভারেজ করব?


আপনার পদ্ধতিটি কি কেবল মেঘকে এপি ডাকবে, বা এটি অতিরিক্ত কাজও করে?
উইনস্টন ইওয়ার্ট


4
ইনজেকশন নির্ভরতা ?
ফাডাফঙ্ক 14

উত্তর:


76

new CloudService()

এবং আপনার সমস্যা আছে।

আধুনিক ওও ডিজাইনটি প্রস্তাব দেয় যে এই ধরণের নির্ভরতা সরাসরি নির্মাণের পরিবর্তে পাস করা উচিত। এটি নিজেই ফাংশনটিতে বা নির্মাণের সময় ক্লাসে যেতে পারে। যদি এই ধরণের জটিলতা মঞ্জুরিপ্রাপ্ত হয় তবে এটি নিয়ন্ত্রণের পাত্রে বিবর্তনের মাধ্যমে ধরে নেওয়া বা একত্রিত করা যেতে পারে।

এই মুহুর্তে, পরীক্ষার সময় আপনার "অনলাইন" ডেটা সরবরাহ করার জন্য একটি উপহাস / জাল পরিষেবাতে পাস করা মোটামুটি তুচ্ছ হয়ে ওঠে। আরও ভাল, এটি আপনার সফ্টওয়্যারটিকে যথেষ্ট নমনীয় হতে দেয়, যাতে আপনি কিছু (সরকারী?) ক্লায়েন্ট উপস্থিত হওয়া উচিত এবং তাদের মানগুলির জন্য মেঘটি ব্যবহার করতে চান না। অথবা আপনি অন্য মেঘ সরবরাহকারীকে অন্যটির জন্য ডাম্প করতে চান। অথবা ...


7
আমি মনে করি হেক ডিপেন্ডেন্সি ইনজেকশন কী তা বোঝার জন্য আমি আরও অনেক কাছে গিয়েছি got
marczellm

আমার অ্যাপ্লিকেশনটির প্রয়োজনীয় সমস্ত দৃষ্টান্ত তৈরি করার সেরা জায়গাটি কোথায়? আমার অ্যাপ্লিকেশন শীর্ষে যতটা সম্ভব সম্ভব? আপনি এখনও অবধি নির্ভরতা ইনজেকশন প্রয়োগ করতে পারেন; এক পর্যায়ে আপনাকে দৃষ্টান্তগুলি তর্ক করার পরিবর্তে দৃষ্টান্তগুলি নিজেরাই তৈরি করতে হবে।
পল

3
@ পল - এটি নির্ভর করে। আমার অভিজ্ঞতায়, অ্যাপ্লিকেশনগুলি প্রায়শই বাইনারি গাছের মতো দেখা যায় - আরও কিছু জটিল আচরণ প্রদানের জন্য এক শ্রেণি / ফাংশন / মডিউল দুটি একসাথে আঠালো। এই "আঠালো" শ্রেণীর মধ্যে একটি হ'ল এটি কংক্রিট বাস্তবায়ন নির্দিষ্ট করে, যা পরিবর্তে উপরের কিছু দ্বারা ব্যবহৃত হয় যা এটিকে অন্য কোনও কিছু দিয়ে আটকায়, যার ফলস্বরূপ ... অবশেষে আপনি আপনার প্রবেশপথে না পৌঁছা পর্যন্ত যে একসাথে বড় টুকরোকে একসাথে আটকায় coherently। "সেরা" স্থান হ'ল এমন জায়গা যা আপনার কোডটিকে এটি করার দরকার না করে বা এটি করা উচিত নয় এমন জিনিসগুলি না জানিয়ে আপনার কোডটিকে যা করা দরকার তা করতে দেয়। এটি বিভিন্ন হবে।
টেলাস্টিন

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

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

37

আমি এটি এর মতো বাস্তবায়ন করব:

public class Foo
{
    private ICloudService cloudService;

    public Foo(ICloudService s)
    {
       cloudService=s;
    }

    public int methodA()
    {
         int val = goOnlineToGetVal();

         return val;
    }

    private int goOnlineToGetVal()
    {
        int oval = cloudService.getValueFromService();
        return oval;
    }
}

ইন্টারফেসটি ICloudServiceহয় পরীক্ষার জন্য একটি উপহাসের সাহায্যে, বা "আসল" মেঘের যত্নের সাথে প্রয়োগ করা যেতে পারে। ইনস্ট্যান্টেশন যখন new CloudService()প্রতিটি কলের জন্য বাধ্যতামূলক হয় getValueFromService, বা CloudServiceতৃতীয় পক্ষের এপিআই থেকে থাকে যা পরিবর্তন করা যায় না, একটি মোড়ক বাস্তবায়ন করুন, ICloudServiceউপযুক্ত কলগুলি থেকে প্রাপ্ত এবং যথাযথ কলগুলি করুন।


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