আমি আমাদের ইউনিট পরীক্ষাগুলি যা আমরা আমার দলে প্রয়োগ করছি সে সম্পর্কিত ক্রমবর্ধমান বিরক্তিকর সমস্যার সাথে লড়াই করে যাচ্ছি। আমরা লেগ্যাসি কোডে ইউনিট পরীক্ষাগুলি যুক্ত করার চেষ্টা করছি যা ভালভাবে ডিজাইন করা হয়নি এবং পরীক্ষাগুলি কীভাবে চালু হচ্ছে তা নিয়ে আমরা লড়াই শুরু করে যাচ্ছি তার পরীক্ষার প্রকৃত সংযোজনে আমাদের কোনও অসুবিধা হয়নি।
সমস্যার উদাহরণ হিসাবে ধরা যাক আপনার কাছে এমন একটি পদ্ধতি রয়েছে যা এর প্রয়োগের অংশ হিসাবে 5 টি অন্যান্য পদ্ধতিকে কল করে। এই পদ্ধতির জন্য একটি পরীক্ষা হতে পারে যা নিশ্চিত করা হয় যে এই 5 টি অন্যান্য পদ্ধতির মধ্যে একটি বলার ফলে একটি আচরণ ঘটে। সুতরাং, যেহেতু ইউনিট পরীক্ষাটি কেবল একটি কারণে এবং কেবল একটি কারণে ব্যর্থ হওয়া উচিত, আপনি এই অন্যান্য 4 টি পদ্ধতিতে কল করার মাধ্যমে সৃষ্ট সম্ভাব্য সমস্যাগুলি মুছে ফেলতে এবং এটিকে উপহাস করতে চান। গ্রেট! ইউনিট পরীক্ষা কার্যকর করে, উপহাসের পদ্ধতিগুলি উপেক্ষা করা হয় (এবং তাদের আচরণটি অন্যান্য ইউনিট পরীক্ষার অংশ হিসাবে নিশ্চিত করা যেতে পারে) এবং যাচাইকরণ কাজ করে।
তবে একটি নতুন সমস্যা আছে - ইউনিট পরীক্ষার অন্তর্গত জ্ঞান রয়েছে আপনি কীভাবে ভবিষ্যতের 4 টি পদ্ধতিতে যে কোনও আচরণ এবং কোনও স্বাক্ষর পরিবর্তনের বিষয়টি নিশ্চিত করেছেন , বা 'প্যারেন্ট পদ্ধতিতে যুক্ত করতে হবে এমন কোনও নতুন পদ্ধতি, ইচ্ছা সম্ভাব্য ব্যর্থতা এড়াতে ইউনিট পরীক্ষা পরিবর্তন করতে হবে।
স্বভাবতই সমস্যাটি কিছুটা কমিয়ে আনা যেতে পারে কেবলমাত্র আরও পদ্ধতিগুলি কম আচরণ সম্পাদন করে তবে আমি আশাবাদী যে সম্ভবত আরও একটি মার্জিত সমাধান পাওয়া যায়।
সমস্যাটি ক্যাপচার করে এখানে ইউনিট পরীক্ষা করার একটি উদাহরণ রয়েছে।
একটি দ্রষ্টব্য নোট হিসাবে 'মার্জ টেস্টস' হ'ল একটি ইউনিট টেস্টিং ক্লাস যা উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসটি থেকে আমরা পরীক্ষা করছি এবং প্রয়োজন অনুযায়ী আচরণকে ওভাররাইড করে। এটি এমন একটি 'প্যাটার্ন' যা আমরা আমাদের পরীক্ষাগুলিতে নিয়োগ করি যাতে আমাদের বাহ্যিক শ্রেণি / নির্ভরতাগুলিতে কলগুলিকে ওভাররাইড করতে দেয়।
[TestMethod]
public void VerifyMergeStopsSpinner()
{
var mockViewModel = new Mock<MergeTests> { CallBase = true };
var mockMergeInfo = new MergeInfo(Mock.Of<IClaim>(), Mock.Of<IClaim>(), It.IsAny<bool>());
mockViewModel.Setup(m => m.ClaimView).Returns(Mock.Of<IClaimView>);
mockViewModel.Setup(
m =>
m.TryMergeClaims(It.IsAny<Func<bool>>(), It.IsAny<IClaim>(), It.IsAny<IClaim>(), It.IsAny<bool>(),
It.IsAny<bool>()));
mockViewModel.Setup(m => m.GetSourceClaimAndTargetClaimByMergeState(It.IsAny<MergeState>())).Returns(mockMergeInfo);
mockViewModel.Setup(m => m.SwitchToOverviewTab());
mockViewModel.Setup(m => m.IncrementSaveRequiredNotification());
mockViewModel.Setup(m => m.OnValidateAndSaveAll(It.IsAny<object>()));
mockViewModel.Setup(m => m.ProcessPendingActions(It.IsAny<string>()));
mockViewModel.Object.OnMerge(It.IsAny<MergeState>());
mockViewModel.Verify(mvm => mvm.StopSpinner(), Times.Once());
}
আপনারা বাকিরা কীভাবে এটি মোকাবেলা করেছেন বা এটিকে পরিচালনা করার দুর্দান্ত কোনও 'সহজ' উপায় নেই?
আপডেট - আমি প্রত্যেকের প্রতিক্রিয়া প্রশংসা করি। দুর্ভাগ্যক্রমে, এবং এটি সত্যিই আশ্চর্যের কিছু নয়, কোডটি পরীক্ষা করা হচ্ছে যদি দরিদ্র না হয় তবে ইউনিট টেস্টিংয়ে কোনও দুর্দান্ত সমাধান, প্যাটার্ন বা অনুশীলন হতে পারে বলে মনে হয় না। আমি উত্তরটি চিহ্নিত করেছি যা এই সাধারণ সত্যটিকে সর্বোত্তমভাবে গ্রহণ করেছে।