گاها برای تولید اطلاعات تصادفی، خصوصا هنگام نوشتن تستها، زمان زیادی بیهوده تلف شده و حجم زیادی کد اضافه تولید میشود. کتابخانهای بنام GenFu ایجاد شده که وظیفه ایجاد دادههای تصادفی را بر عهده گرفتهاست. این کتابخانه متن باز (Open Source) بوده و میتوانید آن را از مخزن گیتهاب دریافت نمایید.
نتیجه کد فوق به این صورت خواهد بود :
اگر دقت کنید متوجه میشوید که GenFu بصورت خودکار دادههایی مرتبط با Property هایی که نام گذاری کردید، ایجاد کردهاست.
کد فوق باعث ایجاد 5 شخص با اطلاعات تصادفی متفاوتی خواهد شد:
همانطور که میبینید، ID اشخاص بصورت تصاعدی مقداردهی شده است.
کد فوق باعث تولید اشخاصی میشود که ایمیل آنها برابر (Firstname).(Lastname) خواهد بود :
6. استفاده از Extensionهای درون ساخت GenFu برای مقداردهی
نتیجه :
7. GenFu WireFrame
در مطلب جاری قصد ایجاد اطلاعات تصادفی برای کلاس زیر را داریم :
public class Person { public int ID { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } public string Email { get; set; } public string PhoneNumber { get; set; } public override string ToString() { return $"{ID}: {Firstname} {Lastname} - {Email} - {PhoneNumber}"; } }
نصب GenFu
برای نصب کتابخانه GenFu از دستور زیر در Package Manager Console استفاده میکنیم :
Install-Package GenFu
1. ایجاد یک شخص
برای ایجاد شخصی جدید همراه با اطلاعاتی تصادفی به شکل زیر عمل خواهیم کرد :
var person = A.New<Person>(); Console.WriteLine(person);
18: Diedra Morgan - Zachary.Garcia@telus.net - (531) 273-9001
برای Email، دادهای با فرمت صحیح ایمیل و برای PhoneNumber هم شماره تلفنی با فرمت صحیح تولید شده است.
2. ایجاد چند شخص
برای ایجاد لیستی از اشخاص نیز میتوانید از متد ListOf استفاده کرده و تعداد اشخاص مورد نیازتان را به آن ارسال کنید ( پیشفرض 25 ) :
var people = A.ListOf<Person>(5); people.ForEach(Console.WriteLine);
97: Maria MacKenzie - Alexandra.Johnson@rogers.ca - (670) 787-3053 34: Alexander Scott - Isaiah.Price@gmail.com - (730) 645-4946 66: Kevin Perez - Gabrielle.Alexander@hotmail.com - (230) 758-8233 81: Maria Evans - Vanessa.Bell@rogers.ca - (508) 572-4343 79: Tyler Parker - Alyssa.Taylor@telus.net - (297) 357-7617
تا به اینجای کار GenFu بخوبی جوابگوی نیازهایمان بودهاست. اما اگر پیشفرضها جوابگو نبود و بخواهیم فرمت دادههای تولید شده را تغییر دهیم چطور ؟
برای اینکار میتوانیم از متد Configure استفاده کرده و نحوه ایجاد داده را برای Property هایی که مشخص میکنیم، تغییر دهیم.
3. ایجاد چند شخص و مقدارهی یک property با مقدار ثابت
اگر بخواهیم دادههای ایجاد شده را داخل دیتابیس لحاظ کنیم، نیاز داریم تا ID آنها را برابر 0 قرار دهیم تا دیتابیس مشکلی برای ثبتشان نداشته باشد. برای ایجاد لیستی از اشخاص که ID آنها برابر 0 باشد :
A.Configure<Person>().Fill(x => x.ID, 0); var people = A.ListOf<Person>(5); people.ForEach(Console.WriteLine);
نتیجه :
0: Darron Gonzalez - Benjamin.Daeninck@hotmail.com - (405) 418-7783 0: Melanie Garcia - Jennifer.Griffin@microsoft.com - (711) 277-8826 0: James Hughes - Tristan.Ward@live.com - (734) 400-8322 0: Miranda Torres - Ross.Davis@rogers.ca - (495) 479-8147 0: David Hughes - Jillian.Alexander@live.com - (361) 617-6642
در این حالت بدون هیچگونه مشکلی میتوانید دادههای ایجاد شده را داخل دیتابیس ذخیره نمایید.
4. ایجاد چند شخص و مقداردهی یک property با متد
حالت دیگری که میتوانید نحوه مقداردهی یک Property را تنظیم کنید، استفاده از متد یا delegate است:
var i = 1; A.Configure<Person>() .Fill(c => c.ID, () => i++); var people = A.ListOf<Person>(5); people.ForEach(Console.WriteLine);
نتیجه :
1: Paul Long - Carlos.Kelly@telus.net - (202) 573-6278 2: Jesse Iginla - Liberty.Moore@gmail.com - (589) 791-3606 3: Raymundo Price - Ang.Taylor@live.com - (336) 400-1601 4: Elizabeth Getzlaff - Leslie.Campbell@att.com - (662) 582-9010 5: Abigail Bailey - Tristan.Ross@live.com - (225) 661-7023
5. ایجاد چند شخص و مقداردهی یک property با مقادیر propertyهای دیگر
همچنین میتوانید از مقادیر Propertyهای دیگر برای مقداردهی یک Property استفاده کنید :
A.Configure<Person>() .Fill(c => c.ID, 0) .Fill(c => c.Email, c => $"{c.Firstname}.{c.Lastname}@gmail.com"); var people = A.ListOf<Person>(5); people.ForEach(Console.WriteLine);
0: Patrick Perry - Patrick.Perry@gmail.com - (796) 460-6576 0: Rebecca Main - Rebecca.Main@gmail.com - (757) 472-3332 0: Kimberly Carter - Kimberly.Carter@gmail.com - (436) 484-8273 0: Sara Lewis - Sara.Lewis@gmail.com - (424) 717-7682 0: Lauren Ross - Lauren.Ross@gmail.com - (277) 294-5776
6. استفاده از Extensionهای درون ساخت GenFu برای مقداردهی
GenFu دارای Extension هایی بوده که باعث میشوند اطلاعات یک Property با مقادیر قابل درک و مشخصی پر شوند.
مثال :
A.Configure<Person>() .Fill(x => x.Firstname).AsPersonTitle(); var people = A.ListOf<Person>(5); people.ForEach(Console.WriteLine);
64: Miss. Ratzlaff - Bryce.Simmons@att.com - (386) 309-2414 7: Air Marshall Yarobi - Ariana.Russell@att.com - (459) 238-0717 96: Air Marshall Taylor - Luke.Olsen@gmail.com - (775) 401-5281 28: Doctor Cox - Leah.Diaz@att.com - (569) 464-7961 99: Master Phillips - Chloe.Scott@hotmail.com - (578) 221-9021
7. GenFu WireFrame
در نهایت GenFu دارای پکیج جانبی به اسم Wireframes است که شامل HTML Helper هایی است که با استفاده از آنها میتوانید المانهای HTML مانند P, Image, Table و ... را با مقادیری برای تست بعنوان Placeholder ایجاد کنید.
برای نصب و مطالعه بیشتر درباره GenFu WireFrames این لینک را ببینید.