আমার ডোমেনটিতে এই জাতীয় প্রচুর অনিবার্য ক্লাস রয়েছে:
public class Person
{
public string FullName { get; }
public string NameAtBirth { get; }
public string TaxId { get; }
public PhoneNumber PhoneNumber { get; }
public Address Address { get; }
public Person(
string fullName,
string nameAtBirth,
string taxId,
PhoneNumber phoneNumber,
Address address)
{
if (fullName == null)
throw new ArgumentNullException(nameof(fullName));
if (nameAtBirth == null)
throw new ArgumentNullException(nameof(nameAtBirth));
if (taxId == null)
throw new ArgumentNullException(nameof(taxId));
if (phoneNumber == null)
throw new ArgumentNullException(nameof(phoneNumber));
if (address == null)
throw new ArgumentNullException(nameof(address));
FullName = fullName;
NameAtBirth = nameAtBirth;
TaxId = taxId;
PhoneNumber = phoneNumber;
Address = address;
}
}
নাল চেক এবং সম্পত্তি সূচনা লেখার কাজ ইতিমধ্যে অত্যন্ত ক্লান্তিকর হয়ে উঠছে তবে বর্তমানে আমি যুক্তিযুক্তি যাচাইকরণ সঠিকভাবে কাজ করে এবং সমস্ত বৈশিষ্ট্য সূচনা হয়েছে তা যাচাই করতে এই ক্লাসগুলির প্রতিটিটির জন্য ইউনিট পরীক্ষা লিখি । এটি অসম্পূর্ণ সুবিধার সাথে অত্যন্ত বিরক্তিকর ব্যস্ততার মতো মনে হয়।
আসল সমাধানটি হ'ল সি # এর জন্য অপরিবর্তনযোগ্যতা এবং অ-অ-রেখাণযোগ্য রেফারেন্স প্রকারের স্থানীয়ভাবে সমর্থন করা। তবে এর মধ্যে পরিস্থিতি উন্নত করতে আমি কী করতে পারি? এই সমস্ত পরীক্ষা লিখতে মূল্যবান? এই জাতীয় ক্লাসগুলির প্রত্যেকের জন্য পরীক্ষার লিখন পরীক্ষা এড়ানোর জন্য কোড জেনারেটর লেখার পক্ষে কি ভাল ধারণা হবে?
আমি এখন উত্তর উপর ভিত্তি করে কি আছে।
আমি দেখতে দেখতে নাল চেক এবং সম্পত্তি সূচনাটি সহজ করতে পারি:
FullName = fullName.ThrowIfNull(nameof(fullName));
NameAtBirth = nameAtBirth.ThrowIfNull(nameof(nameAtBirth));
TaxId = taxId.ThrowIfNull(nameof(taxId));
PhoneNumber = phoneNumber.ThrowIfNull(nameof(phoneNumber));
Address = address.ThrowIfNull(nameof(address));
রবার্ট হার্ভে নিম্নলিখিত প্রয়োগগুলি ব্যবহার করে :
public static class ArgumentValidationExtensions
{
public static T ThrowIfNull<T>(this T o, string paramName) where T : class
{
if (o == null)
throw new ArgumentNullException(paramName);
return o;
}
}
নাল চেক পরীক্ষা ব্যবহার করে সহজ GuardClauseAssertionথেকে AutoFixture.Idioms(প্রস্তাবনা, জন্য ধন্যবাদ Esben Skov Pedersen ):
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var assertion = new GuardClauseAssertion(fixture);
assertion.Verify(typeof(Address).GetConstructors());
এটি আরও সংকোচিত হতে পারে:
typeof(Address).ShouldNotAcceptNullConstructorArguments();
এই এক্সটেনশন পদ্ধতিটি ব্যবহার করে:
public static void ShouldNotAcceptNullConstructorArguments(this Type type)
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var assertion = new GuardClauseAssertion(fixture);
assertion.Verify(type.GetConstructors());
}