আপনি কীভাবে নুনিটের সাথে ব্যক্তিগত পদ্ধতি পরীক্ষা করবেন?


104

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

আপনি কীভাবে নুনিটের সাথে ব্যক্তিগত পদ্ধতি পরীক্ষা করবেন?

উত্তর:


74

সাধারণত, ইউনিট টেস্টিং ক্লাসের পাবলিক ইন্টারফেসকে সম্বোধন করে, তত্ত্বের ভিত্তিতে যে প্রয়োগটি নিরবচ্ছিন্ন থাকে, যতক্ষণ না ক্লায়েন্টের দৃষ্টিকোণ থেকে ফলাফলগুলি সঠিক হয়।

সুতরাং, নুনিট জনসাধারণের সদস্যদের পরীক্ষার জন্য কোনও ব্যবস্থা সরবরাহ করে না।


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

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

3
@Quango, একটি প্রমিত টেস্টিং সেটআপে, "লেখক" হয় কোডের একটি প্রকাশনা ব্যবহারকারী। তবুও, যদি আপনি কোনও ডিজাইনের সমস্যার গন্ধ না পান তবে আপনার কাছে ক্লাসটি পরিবর্তন না করেই জন-পাবলিক পদ্ধতি পরীক্ষা করার বিকল্প রয়েছে। System.Reflectionবাঁধাই পতাকা ব্যবহার করে আপনাকে অ-সর্বজনীন পদ্ধতিতে অ্যাক্সেস করতে এবং প্রার্থনা করার অনুমতি দেয়, যাতে আপনি NUnit হ্যাক করতে পারেন বা আপনার নিজস্ব কাঠামো সেট আপ করতে পারেন। অথবা (সহজ, আমি মনে করি), আপনি অ্যাক্সেস মডিফায়ারগুলি পরিবর্তন করতে আপনাকে একটি কম্পাইল-টাইম ফ্ল্যাগ (#if TESTING) সেট আপ করতে পারেন, যা আপনাকে বিদ্যমান ফ্রেমওয়ার্কগুলি ব্যবহার করার অনুমতি দেয়।
হারপো

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

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

57

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

private MethodInfo GetMethod(string methodName)
{
    if (string.IsNullOrWhiteSpace(methodName))
        Assert.Fail("methodName cannot be null or whitespace");

    var method = this.objectUnderTest.GetType()
        .GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);

    if (method == null)
        Assert.Fail(string.Format("{0} method not found", methodName));

    return method;
}

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


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

12
এটাই আমার দরকার ছিল। ধন্যবাদ! আমার কেবলমাত্র একটি ব্যক্তিগত ক্ষেত্রটি সঠিকভাবে সেট হয়ে গেছে কিনা তা যাচাই করা ছিল এবং পাবলিক ইন্টারফেসের মাধ্যমে কীভাবে এটি নির্ধারণ করা যায় তা নির্ধারণ করার জন্য আমাকে 3 ঘন্টা ব্যয় করতে হবে না। এটি বিদ্যমান কোড যা একটি ঝকঝকে রিফেক্টর করা যায় না। এটা মজার বিষয় যে কীভাবে একটি সাধারণ প্রশ্নের
উত্তরটি

5
এটি নির্বাচিত উত্তর হওয়া উচিত, কারণ এটিই কেবলমাত্র উত্তরটির উত্তর দেয়।
বাভাজা

6
একমত। নির্বাচিত উত্তরের গুণাগুণ রয়েছে, তবে ওপির প্রশ্ন নয়, "আমার ব্যক্তিগত পদ্ধতি পরীক্ষা করা উচিত" এর উত্তর।
চেস্টারব্র

2
এটি কাজ করে। ধন্যবাদ! এটিই অনেকে অনুসন্ধান করছেন hisএটি নির্বাচিত উত্তর হওয়া উচিত,
অ্যাবল জনসন

47

ইউনিট পরীক্ষা লেখার জন্য একটি সাধারণ প্যাটার্ন হ'ল জনসাধারণের পদ্ধতিগুলি পরীক্ষা করা।

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

এই পদ্ধতিগুলি বর্তমানে তারা যে ক্লাসে রয়েছে সেগুলিতে সর্বজনীন করা ভুল হবে be এটি চুক্তিটি ভঙ্গ করবে যে আপনি চান যে শ্রেণিটি করা উচিত।

তাদের কোনও সহায়ক শ্রেণিতে স্থানান্তর করা এবং সেখানে তাদের সর্বজনীন করা সঠিক হতে পারে। এই শ্রেণিটি আপনার এপিআই দ্বারা প্রকাশ করা হবে না।

এইভাবে পরীক্ষার কোডটি আপনার সর্বজনীন কোডের সাথে কখনই মিশ্রিত হয় না।

অনুরূপ সমস্যাটি বেসরকারী ক্লাসগুলি পরীক্ষা করা। ক্লাস আপনি আপনার সমাবেশ থেকে রফতানি করবেন না। এক্ষেত্রে আপনি স্পষ্টভাবে আপনার পরীক্ষা কোড অ্যাসেমব্লিকে ইন্টারনালভিজিবলটো বৈশিষ্ট্যটি ব্যবহার করে প্রোডাকশন কোড অ্যাসেমব্লির বন্ধু করতে পারেন।


1
+ 1 হ্যাঁ! আমার পরীক্ষাগুলি লেখার সময় আমি এই সিদ্ধান্তে পৌঁছেছি, ভাল পরামর্শ!
অ্যান্ডি

1
আপনি যে ব্যক্তিগত পদ্ধতি পরীক্ষা করতে চান তবে এপিআই-র ব্যবহারকারীদের কাছে কোনও ভিন্ন শ্রেণীর কাছে প্রকাশ করা নয় যা প্রকাশিত হয় না এবং তাদের সর্বজনীন করে তোলে এমন ব্যক্তিগত পদ্ধতিগুলি যা আমি খুঁজছিলাম ঠিক তেমনটিই সন্ধান করছে।
টমাস এন

ধন্যবাদ @ মোমরচিল্লি এর আগে ইন্টার্নালভিসিবলটো কখনও দেখেনি। টেস্ট করা অনেক সহজ।
অ্যান্ড্রু ম্যাকনহটন

ওহে. সম্প্রতি কোনও মন্তব্য ছাড়াই কিছু ডাউন ভোট পেয়েছে। আপনার চিন্তা বা উদ্বেগ ব্যাখ্যা করতে দয়া করে কিছু প্রতিক্রিয়া সরবরাহ করুন।
morechilli

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

21

আপনি যে পরীক্ষার লক্ষ্য করছেন তার অ্যাসেম্বলিটির বন্ধু সমাবেশ হিসাবে আপনার পরীক্ষা অ্যাসেম্বলিটিকে घोषित করে ব্যক্তিগত পদ্ধতিগুলি পরীক্ষা করা সম্ভব। বিস্তারিত জানার জন্য নীচের লিঙ্কটি দেখুন:

http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx

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

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

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

আশা করি এই উত্তরটি আপনাকে সাধারণভাবে ইউনিট পরীক্ষার বিষয়ে জানাতে এবং ইউনিট টেস্টিংয়ের থেকে আরও ভাল ফলাফল পেতে আপনাকে আরও কিছু তথ্য দেবে।


12
অভ্যন্তরীণ পদ্ধতিগুলি পরীক্ষা করা সম্ভব , ব্যক্তিগত নয় (NUnit সহ)।
ট্রুউইল

6

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

ইউনিট টেস্টিং পরীক্ষা চালিত বিকাশে উন্নত হয়েছে। সমস্ত পদ্ধতির পরীক্ষা করার ক্ষমতা থাকা সেই অ্যাপ্লিকেশনটির জন্য দরকারী।


5

এই প্রশ্নটি তার উন্নত বছরগুলিতে, তবে আমি ভেবেছিলাম যে আমি এটি করার পদ্ধতিটি ভাগ করব।

মূলত, আমার যে সমস্ত ইউনিট টেস্ট ক্লাস রয়েছে তারা এসেম্বলির জন্য তারা 'ইউনিটস্টেস্ট' নেমস্পেসে সেই অ্যাসেমব্লির 'ডিফল্ট' নীচে পরীক্ষা করছে - প্রতিটি পরীক্ষার ফাইলটি একটিতে আবৃত থাকে:

#if DEBUG

...test code...

#endif

অবরুদ্ধ করুন এবং এর অর্থ হ'ল ক) এটি কোনও রিলিজে বিতরণ করা হচ্ছে না এবং খ) আমি হুপ জাম্পিং ছাড়াই internal/ Friendস্তরের ঘোষণাপত্র ব্যবহার করতে পারি ।

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

public partial class TheClassBeingTested
{
    private int TheMethodToBeTested() { return -1; }
}

সমাবেশের প্রধান শ্রেণিতে এবং পরীক্ষার শ্রেণিতে:

#if DEBUG

using NUnit.Framework;

public partial class TheClassBeingTested
{
    internal int NUnit_TheMethodToBeTested()
    {
        return TheMethodToBeTested();
    }
}

[TestFixture]
public class ClassTests
{
    [Test]
    public void TestMethod()
    {
        var tc = new TheClassBeingTested();
        Assert.That(tc.NUnit_TheMethodToBeTested(), Is.EqualTo(-1));
    }
}

#endif

স্পষ্টতই, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি বিকাশের সময় এই পদ্ধতিটি ব্যবহার করছেন না, যদিও একটি রিলিজ বিল্ড শীঘ্রই এটি করতে গেলে একটি অজান্তেই কল নির্দেশ করবে।


4

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


3

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

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


2

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

আপনার সরল নয় এমন কিছু পরীক্ষা করা উচিত নয়।

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

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


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

1

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

সুতরাং আপনি যদি সত্যিই অভ্যন্তরীণ সদস্যদের পরীক্ষা করতে চান তবে আপনি এই পদ্ধতির একটি ব্যবহার করতে পারেন:

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

কোড উদাহরণ (সিউডো কোড):

public class SomeClass
{
    protected int SomeMethod() {}
}
[TestFixture]
public class TestClass : SomeClass{

    protected void SomeMethod2() {}
    [Test]
    public void SomeMethodTest() { SomeMethod2(); }
}

যে তেলাপোকা মনে হয় আপনার উদাহরণ কোড ভিতরে লুকানো হয়;) পদ্ধতি ভিতরে NUnit এর চোকান সর্বজনীন করা হবে, অন্যথায় আপনি পেতে Message: Method is not public
Gucu112

@ Gucu112 ধন্যবাদ। আমি এটা ঠিক করেছি. সাধারণভাবে এটি বিবেচনা করে না কারণ লক্ষ্যটি ডিজাইন pov থেকে অ্যাপ্রোচ দেখানো।
বুর্জু

1

আপনি আপনার পদ্ধতিগুলি অভ্যন্তরীণ সুরক্ষিত এবং তারপরে ব্যবহার করতে পারেন assembly: InternalsVisibleTo("NAMESPACE") আপনার পরীক্ষার নাম স্থানটি ব্যবহার করে।

অতএব, না! আপনি ব্যক্তিগত পদ্ধতিতে অ্যাক্সেস করতে পারবেন না, তবে এটি একটি কাজের জায়গা।


0

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

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

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

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