كيفية إنشاء بيانات اختبار فعّالة لوحدات الاختبار (2023)

مقدمة

تعد إنشاء بيانات اختبار أحد أهم جوانب كتابة اختبارات الوحدات البرمجية، ويعتبر مطورو البرمجيات شغوفين بها لسبب وجيه. في هذا الوحدة، سنتعلم لماذا يعتبر إنشاء بيانات اختبار أمرًا ضروريًا وكيف يمكننا القيام بذلك بطرق فعّالة.

لماذا إنشاء بيانات اختبار؟

تعتبر الاختبارات الناجحة هي تلك التي تكون وصفية وتؤدي إلى نتيجة ثابتة في كل تشغيل. من المهم جدًا أن يكون لدينا وسيلة لفهم سبب فشل الاختبار إذا حدث ذلك، ولهذا السبب يُحبذ إنشاء بيانات اختبار فريدة لكل اختبار.

استخدام البيانات الموجودة في بيئة الإنتاج لا يعد فكرة جيدة، حيث يمنع منصة 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');
    }

    // باقي الدوال...
}

الختام

باستخدام هذه الطرق، يمكنك ضمان أن اختبارات الوحدات البرمجية الخاصة بك تعمل بفعالية وتظل ثابتة مع كل تشغيل. استخدم الأساليب التي تناسب احتياجاتك وتجعل اختباراتك سهلة المتابعة وفعّالة.

Top Articles
Latest Posts
Article information

Author: Jamar Nader

Last Updated: 08/12/2023

Views: 6588

Rating: 4.4 / 5 (75 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Jamar Nader

Birthday: 1995-02-28

Address: Apt. 536 6162 Reichel Greens, Port Zackaryside, CT 22682-9804

Phone: +9958384818317

Job: IT Representative

Hobby: Scrapbooking, Hiking, Hunting, Kite flying, Blacksmithing, Video gaming, Foraging

Introduction: My name is Jamar Nader, I am a fine, shiny, colorful, bright, nice, perfect, curious person who loves writing and wants to share my knowledge and understanding with you.