আপনি নিয়ামকদের জন্য ইউনিট-পরীক্ষা কেন লিখবেন?


22

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

public class ConstituencyControllerTests
{
    private ConstituencyController _constituencyController;
    private Mock<IConstituencyService> _IConstituencyServiceMock;

    public ConstituencyControllerTests() {
        _IConstituencyServiceMock = new Mock<IConstituencyService>();
    }

    [Test]
    public async Task I_Check_For_Return_Type_And_Result() {
        _constituencyController = new ConstituencyController( _IConstituencyServiceMock.Object );

        var result = await _constituencyController.Get();
        var content = ( (dynamic)result ).Content;

        Assert.IsEmpty( content );
        Assert.IsInstanceOf( typeof( System.Web.Http.Results.OkNegotiatedContentResult<IEnumerable<ListOfConstituencies>> ), result );
        _IConstituencyServiceMock.Verify( x => x.ListOfConstituencies(), Times.Once() );
    }
}


7
@ @At এর সাথে একমত হবেন না। এটি প্রয়োজনীয়ভাবে ভাষা নির্মাণ সম্পর্কে নয় তবে কোনও নিয়ামক দ্বারা প্রাপ্ত ফলাফলের ধরণের সম্পর্কে। যখন আপনার কোনও উত্তরাধিকারের শ্রেণিবদ্ধতা নেই তখন একই জিনিসটি সাজানোর জন্য এটি নিয়মিত আলাদা জন্তুতে পরিণত হয় যখন নিয়ামক পূর্বপুরুষদের প্রত্যাবর্তনের প্রত্যাশা করে, নিয়ামক ব্যক্তিটি ফিরে আসেন এবং এখন ব্যক্তি পরিবর্তিত হয় পূর্বপুরুষের থেকে নয়, পিপলস এ্যানস্টোর ... এছাড়াও উত্তর দেয় কেন এই জাতীয় পদ্ধতির পরীক্ষা করা ভাল ধারণা হতে পারে ...;) ইউনিট পরীক্ষাগুলি এমন পরিস্থিতিতে বাছাই করা যেখানে এক জিনিসে সি / বা অন্য কিছু ভেঙে যেতে পারে on
মার্জন ভেনেমা


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

উত্তর:


29

তারা মূল বিষয় এখানে:

আমি পুরোপুরি ভালভাবে জানতে পারি যদি এই কন্ট্রোলারটি ব্রাউজারে পদ্ধতিটি সম্পাদন করে কাঙ্ক্ষিত ধরণটি ফেরত দেয়

ইউনিট-টেজিং হ'ল অ-রিগ্রেশন টেস্টিংয়ের সহজ ইউনিটের কোডের স্বয়ংক্রিয়তা সম্পর্কিত , আপনি নিজের মতো দেখছেন না। আপনি নিজের অ্যাপ্লিকেশনটিতে সর্বদা ইউনিট টেস্টিং করতে চান না।

সম্পাদনা: @ অন্য একটি মন্তব্য যোগ করা হচ্ছে:

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

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

এটি হ'ল, আপনি যদি প্রতিটি কিছুকে ইউনিট-টেস্ট করেন তবে প্রতিবার কোনও সাধারণ উপাদানকে সংশোধন করার জন্য আপনাকে এক বা একাধিক পরীক্ষা আপডেট করতে হবে।


4
পুনরায় যোগ করা: I would know perfectly well if this controller returned the wanted type by executing the method in a browser.- এটি স্কেলিংয়ের সহজতা। একটি ব্রাউজারে একটি নিয়ামক পরীক্ষা করা ঠিক হতে পারে; 10, 20, 50 কন্ট্রোলার সম্পর্কে কি? আপনি একবার পরীক্ষা লিখবেন; আপনি যখন নিয়ামকটি ওভারহেডে পরিবর্তন করেন তখন আপনাকে এটি আপডেট করার প্রয়োজন হতে পারে। তবে আপনি কতবার মোতায়েন করেন ? অবশ্যই একটি ম্যানুয়াল প্রতিটি সময় পরীক্ষা অনেক বেশি ওভারহেড আছে যে পরীক্ষা।
আরেকটি ডেভ

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


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

24

আপনি নিয়ামকদের জন্য ইউনিট-পরীক্ষা কেন লিখবেন?

কারণ প্রসঙ্গটি না জেনে আপনি এই বা এটির পরীক্ষা করার প্রয়োজন কিনা তা নিশ্চিত করে বলতে পারবেন না। এখানে কয়েকটি কারণ রয়েছে, আপনি কেন নিয়ন্ত্রকদের পরীক্ষা করতে চাইতে পারেন:

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

2
আমি যোগ করব: "আপনি ভবিষ্যতে প্রকল্পটি থেকে কে মুক্তি পেতে চলেছেন তা অনুমান করতে পারবেন না, এবং পরীক্ষাগুলি স্ব-নথিভুক্ত কোডের অংশ"
লাইভ

4
মাঝের বিন্দুতে, কোনও প্রকল্প যা মনে না রেখে পরীক্ষামূলকভাবে তৈরি করা হয়েছিল তা বিদ্রূপ ব্যতীত নিয়ামক পরীক্ষা ছাড়া অন্য কোনও উপায়ে পরীক্ষামূলক হতে পারে না। আমি একটি সি # টিমের সাথে কাজ করি যাঁদের তত্ত্বাবধানে ঠিক এই জাতীয় একটি প্রকল্প রয়েছে তাই তারা নিয়ামক পরীক্ষা লিখছেন যতক্ষণ না তারা সূক্ষ্ম-দানযুক্ত পরীক্ষায় সক্ষম হওয়ার জন্য প্রয়োজনীয় কাঠামো (ইন্টারফেস ইত্যাদি) যুক্ত না করে।
ওয়েন কনরাড 13

1

আমি ওপির সাথে পুরোপুরি একমত

নিয়ামকের জন্য একটি ইউনিট পরীক্ষা অর্থহীন। আপনি নিয়ন্ত্রণকারীদের নিয়ন্ত্রণের পরীক্ষার মাধ্যমে নিখুঁতভাবে পরীক্ষা করেন (উদাহরণস্বরূপ সেলেনিয়াম ব্যবহার করে)।

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


হতে পারে তবে এটি প্রশ্নের উত্তর নয়। আসলে, এটি এখানে ইউনিট পরীক্ষাগুলি ব্যবহারের বিরুদ্ধে একটি যুক্তি।
JᴀʏMᴇᴇ

আমি মনে করি আমি এই প্রশ্নের উত্তর দিয়েছি "আপনি কি বিশ্বাস করেন যে এর জন্য একটি পরীক্ষা করা দরকার এবং কেন?"
winkbrace

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

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

-1: একটি নিয়ামক জন্য একটি ইউনিট পরীক্ষা অর্থহীন হতে পারে। কন্ট্রোলার রূপান্তর সম্পর্কে, তবে কখনও কখনও রূপান্তরটি নিজেই জটিল এবং কোনও বিকাশকারী এটি coveredেকে রাখতে চায়। আমি আরও মনে করি যে ইউনিট-পরীক্ষাগুলি 1) শেষ পর্যন্ত কোনও বাস্তবায়ন বৈধতা দেওয়ার বিষয়ে, অগত্যা উচ্চ-স্তরের আচরণকে বৈধতা দেওয়ার নয়, এবং 2) খুব দ্রুত অভিযুক্ত হওয়া উচিত । উভয় গুণাবলী বাস্তবায়নের সময় ইউনিট-পরীক্ষাগুলিকে আরও কার্যকর করে তোলে; অন্য কথায়, এগুলি চূড়ান্তভাবে একজন বিকাশকারীর হাতিয়ার এবং ঘটনাক্রমে পণ্যটির মানকে বৈধ করার একটি উপায়।
আরএসএনএন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.