মোকে যাচাইযোগ্য () এর উদ্দেশ্য কী?


125

এর উদ্দেশ্য কী Verifiable()?

আমি যদি একটি যাচাই করি Mockএবং এটি ছেড়ে দিই তবে এটি এখনও যাচাই করে SetUp

সম্পাদনা করুন: আমি VerifyAll()সবকিছু যাচাই করার কারণটি ব্যবহার করছিলাম । Verify()শুধুমাত্র আমার .Verifiable() SetUpগুলি পরিবর্তনের পরে পরীক্ষা করা হচ্ছে।

উত্তর:


83

অ্যাডেন্ডেন্ডাম: অন্য উত্তরটি যেমন বলেছে, এর উদ্দেশ্য .Verifiableহ'ল Setup"মুলতুবি Verify(...)কল" এর একটি সেটে তালিকাভুক্ত করা যা এর মাধ্যমে ট্রিগার করা যায় mock.Verify()

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

  • একটি mock.Setup()এবং মধ্যে DRYness বজায় রাখাmock.Verify
  • একজনকে আসল Verifyকল থেকে একটি যাচাইকরণের কনফিগারেশনটি সংযোগ বিচ্ছিন্ন করার অনুমতি দেওয়া (যেমন, আপনি এটি অন্য সহায়ক পদ্ধতিতে সেট আপ করতে পারেন)

... এবং আমার উত্তর ফিরে, যা নিখুঁতভাবে কার্যকরভাবে বলেছে "সাবধান থাকুন যেহেতু উপরের উপকারগুলি সাধারনত এই লক্ষ্যগুলি অর্জনের পরীক্ষার স্থায়িত্ব এবং রক্ষণাবেক্ষণের উপর যে প্রভাব ফেলে যা এই ধরণের গঠনগুলির উপর অত্যধিক ঝুঁকিতে পড়েছে দ্বারা প্রভাবিত হয়ে যায়"

মূল: লক্ষ্য করুন যেখানে সম্ভব, এক পরিবর্তে অনুসরণ করা উচিত AAA যাচাই বিন্যাস এবং অত: পর একটি হতে হবে স্পষ্ট করছেন mock.Verify( expression )কল পর কাজ, কাজ করা হয়েছে বরং একটি তুলনায় mock.Setup( ... ).Verifiable()একটি সঙ্গে যুক্ত করা mock.Verify()বাmock.VerifyAll() যেখানে সম্ভব (ক্রেডিট: @kzu )।


7
@ এরিকস্মিথ পিছনে ফিরে তাকান, মনে করবেন না যে আমি এটি যথেষ্ট দৃ strongly়ভাবে রেখেছি। আপনার কাজটি এএএ বান্ডিলিংয়ে বিভক্ত করা এবং অ্যারেঞ্জ এবং এ্যাসের পর্বের মধ্যে অভিন্নতার বিষয়ে অতিরিক্ত মনোনিবেশ করার চেয়ে আরও বেশি সুবিধা রয়েছে। 90% সময়ের মধ্যে, আপনি কীভাবে ভেরিফাই কলগুলি শেষের দিকে প্রকাশ করেন তার সংক্ষিপ্তসারগুলি থেকে কিছু অর্জন করা উচিত, তাই কিছু ক্ষেত্রে যদি কিছু বেদনাদায়ক নকল বলে মনে হয় তবে এটির জন্য অনুকূলতা নিতে আপনার অনেক সময় নেওয়া উচিত। যুক্তি দেন তার অন্যতম manning.com/osherove তোলে খুব ভাল যে কারো জাম্পিং করার জন্য একটি পরীক্ষা জানার উপার্জন সম্মেলন গুরুত্বপূর্ণ -so লাঠি হয়!
রুবেন বারটেলিংক

3
আমি সাধারণত গ্রহণযোগ্য জ্ঞানের শস্যের বিরুদ্ধে যেতে চাই না তবে এএএ বনাম Verifyable()/ VerifyAll()সমস্ত ক্ষেত্রে বেনিফিট হিসাবে এখনও অবিস্মৃত । আমার বর্তমান ইউনিট পরীক্ষায় প্রচুর সংখ্যক Setup(...)কল রয়েছে (> 30)। কনভেনশনটি সন্তুষ্ট করতে সমান যাচাইকরণ () এর সাথে প্রত্যেকের সাথে মিলিত হতে পারে তবে এটি প্রচুর পরিমাণে কোড ডুপ্লিকেশন সৃষ্টি করে এবং ইউনিট পরীক্ষার সংখ্যা বাড়ার সাথে সাথে এটি বজায় রাখতে এবং পড়তে আরও জটিল হবে। আমি অনুমান করি যে আমি সত্যিই যা জিজ্ঞাসা করছি সেগুলি ব্যতিক্রম হতে পারে যদি সেখানে প্রচুর সংখ্যক সেটআপ থাকে বা Verifiable()কোনও কঠোর এবং দ্রুত নিয়ম এড়ানো যায় ?
স্টিভ চেম্বারস

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

1
@Liam এবং এটা হল প্রকৃতপক্ষে সম্পূর্ণই সূক্ষ্ম যে আপনি এখনও বিশ্বাস করছি এটা আপনার কাজ জন্য একটি উপযুক্ত হাতিয়ার - যে এটি সুন্দরভাবে শোষ অর্জন করা সত্ত্বেও অর্থাত - আমার বাস্তব বিন্দু মাত্র এটি ঠাট্টা সঙ্গে পরীক্ষা লেখার জন্য একটি সাধারণ পদ্ধতির হিসাবে উপর frowned হল এ Setupএবং এ এর মধ্যে Verify, সম্ভবত এটি এএএ এবং পরিবারগুলির যে কৌশলগুলির
দৃ family়ভাবে

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

54

যখন Verify()পদ্ধতি পরীক্ষা শেষে বলা হয়, যদি প্রত্যাশা যাচাইযোগ্য হিসাবে চিহ্নিত কোন নামক হয়নি, তারপরে একটি ব্যতিক্রম নয় thrown

VerifyAll() যাচাইযোগ্য প্রত্যাশাগুলি পরীক্ষা করে না।


আপনি যাচাইযোগ্য প্রত্যাশাগুলি যাচাই করে না যা যাচাই করুন () যাচাই করে নিন সে সম্পর্কে আরও কিছুটা ব্যাখ্যা করতে আপনি কি আপত্তি করবেন?
JW

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