কোন ক্লাসের একটি বৈশিষ্ট্য আছে কিনা পরীক্ষা?


109

আমি একটু টেস্ট-ফার্স্ট ডেভলপমেন্ট করার চেষ্টা করছি, এবং আমি যাচাই করতে চেষ্টা করছি যে আমার ক্লাসগুলি একটি বৈশিষ্ট্যের সাথে চিহ্নিত হয়েছে:

[SubControllerActionToViewDataAttribute]
public class ScheduleController : Controller

আমি কীভাবে ইউনিট পরীক্ষা করব যে ক্লাসের জন্য এটি নির্দিষ্ট করা হয়েছে?

উত্তর:


129

যে পরীক্ষা

Attribute.GetCustomAttribute(typeof(ScheduleController),
    typeof(SubControllerActionToViewDataAttribute))

নাল নয় ( Assert.IsNotNullবা অনুরূপ)

(আমি এটির পরিবর্তে IsDefinedএটি ব্যবহার করার কারণটি হ'ল বেশিরভাগ সময় আমি গুণাবলীর কিছু বৈশিষ্ট্যকেও বৈধতা দিতে চাই ....)


6
কেবলমাত্র বৈশিষ্ট্যটি উপস্থিত রয়েছে কিনা তা যাচাই করতে যা সাধারণত প্যারামিটারলেস / সম্পত্তিহীন বৈশিষ্ট্যের জন্য প্রয়োজনীয়, এটি ব্যবহার করা সস্তা s
লাসে ভি কার্লসেন

4
যেমনটি আইএসডিফাইন্ডের ব্যয়টি হ'ল সস্তা ... তবে বেশিরভাগ ক্ষেত্রে (এবং নির্দিষ্ট ইউনিট পরীক্ষায়) আপনি এই পার্থক্যটি লক্ষ্য করবেন না। হতে পারে যদি এটি প্রোডাকশন কোডের একটি শক্ত লুপ ছিল ...
মার্ক গ্র্যাভেল

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

একটি পদ্ধতির জন্য আমরা কীভাবে একই পরীক্ষা করতে পারি?
মনবিন্দর সিং

83

একইভাবে আপনি সাধারণত কোনও শ্রেণীর কোনও বৈশিষ্ট্যের জন্য যাচাই করেন।

এখানে কিছু নমুনা কোড।

typeof(ScheduleController)
.IsDefined(typeof(SubControllerActionToViewDataAttribute), false);

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


+1 করেছে এবং তারপরে ত্রুটি লক্ষ্য করা গেছে। এটি হওয়া উচিত s
আলেকজান্ডার ব্লেটস্কি

@alexanderb আপনি অবশ্যই ঠিক আছেন। আমি এখন আমার উত্তর আপডেট করেছি। আমি অবশ্যই আমার উত্তরটি কম্পাইলারের বিপরীতে পরীক্ষা করা উচিত নয়! ত্রুটিটি নির্দেশ করার জন্য ধন্যবাদ
রিচার্ডড

10
এই পদ্ধতির আগের চেয়ে দ্রুততর
স্লাভা

18

এটিতে জেনেরিকগুলি ব্যবহার করাও সম্ভব:

var type = typeof(SomeType);
var attribute = type.GetCustomAttribute<SomeAttribute>();

এইভাবে আপনার আর কোনও দরকার নেই typeof(...), যা কোড ক্লিনার করতে পারে।


এটি আমার পক্ষে কাজ করে না। কোনটা using.. আমি মিস করছি?

@ স্ক্যানজি আমি নিশ্চিত নই, আপনি কি আইডিই ব্যবহার করছেন না? (সাধারণত তারা সঠিক পরামর্শ দেয় using) আপনি কোন ত্রুটি পেয়েছেন?
Kroltan

4
ঠিক আছে, এখানে আমি দেখেছি GetCustomAttribute<SomeAttribute>পদ্ধতি .NET 4.5 থেকে এখনে এবং আমার আইডিই 3.5 সেট তাই সবকিছু এখন স্পষ্ট

9

আমি জানি যে এই থ্রেডটি আসলেই পুরানো, তবে কেউ যদি এতে হোঁচট খায় তবে আপনি এই ধরণের দৃ doing়তা করার জন্য অনর্গল প্রকল্প খুব সুবিধাজনক দেখতে পাবেন ।

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