مقدمة
تعد إنشاء بيانات اختبار أحد أهم جوانب كتابة اختبارات الوحدات البرمجية، ويعتبر مطورو البرمجيات شغوفين بها لسبب وجيه. في هذا الوحدة، سنتعلم لماذا يعتبر إنشاء بيانات اختبار أمرًا ضروريًا وكيف يمكننا القيام بذلك بطرق فعّالة.
لماذا إنشاء بيانات اختبار؟
تعتبر الاختبارات الناجحة هي تلك التي تكون وصفية وتؤدي إلى نتيجة ثابتة في كل تشغيل. من المهم جدًا أن يكون لدينا وسيلة لفهم سبب فشل الاختبار إذا حدث ذلك، ولهذا السبب يُحبذ إنشاء بيانات اختبار فريدة لكل اختبار.
استخدام البيانات الموجودة في بيئة الإنتاج لا يعد فكرة جيدة، حيث يمنع منصة Lightning Platform المطورين من تحرير فئات Apex في بيئات الإنتاج. لذا، يجب عليك استخدام بيئة التطوير أو النسخة التجريبية لإنشاء أو تحرير اختباراتك.
طرق إنشاء بيانات الاختبار
هناك العديد من الطرق لإنشاء بيانات اختبار، وفي هذه الوحدة سنستعرض أربع منها بشكل تفصيلي:
القوة الغاشمة (Brute Force)
هذه الطريقة تتضمن إنشاء وإدراج السجلات الضرورية يدويا في كل اختبار. يمكن أن تكون فعّالة، ولكن قد تؤدي إلى اختبارات طويلة وصعبة المتابعة.
@IsTest
private class DataGenerationTests {
@IsTest
static void testBruteForceAccountCreation() {
// المعطى
List<Account> accts;
// عند
Test.startTest();
accts = [SELECT Id FROM Account];
Test.stopTest();
// ثم
System.assertEquals(true, accts.size() > 0, 'كان متوقعًا العثور على حساب واحد على الأقل');
}
}
مصانع الاختبار (Test Factories)
لتبسيط اختباراتك وجعلها أسهل للمتابعة، يمكنك نقل إنشاء البيانات إلى فئة قابلة لإعادة الاستخدام، وهي ما نسميه "مصانع الاختبار".
@IsTest
public class TestFactory {
public static Account getAccount(String name, Boolean doInsert) {
Account a = new Account(name = name);
if (doInsert) {
insert a;
}
return a;
}
// باقي الدوال...
}
طرق إعداد الاختبار (@TestSetup Methods)
لتبسيط إعداد البيانات للعديد من الاختبارات في نفس الفئة، يمكننا استخدام الطرق المُحددة بـ @TestSetup.
@TestSetup
static void dataCreation() {
// المعطى
Account a = TestFactory.getAccount('Muddy Waters Inc.', true);
Contact c = TestFactory.getContact(a.id, 'Muddy', 'Waters', true);
Opportunity opp = new Opportunity();
opp.name = 'Long lost record';
opp.accountId = a.id;
opp.closeDate = Date.today().addDays(14);
opp.stageName = 'prospecting';
insert opp;
}
ملفات بيانات CSV (CSV Data Files)
يمكن استخدام ملفات CSV كمورد ثابت للبيانات، وهو يسمح بتوليد بيانات الاختبار مباشرةً من هذا الملف.
@IsTest
private class CSVTests {
@TestSetup
static void loadTestDataFromStaticResource() {
// المعطى
List<sObject> accounts = Test.loadData(Account.SObjectType, 'accountData');
}
// باقي الدوال...
}
الختام
باستخدام هذه الطرق، يمكنك ضمان أن اختبارات الوحدات البرمجية الخاصة بك تعمل بفعالية وتظل ثابتة مع كل تشغيل. استخدم الأساليب التي تناسب احتياجاتك وتجعل اختباراتك سهلة المتابعة وفعّالة.