0%
بيانات الاختبار

بيانات الاختبار

باني الاختبار، والعزل، والمعاملات الملغاة، ومجموعات البيانات التي تتقادم بسرعة.

10-15 دقيقة

بيانات الاختبار

هذا الاختبار يفشل. اعثر على السبب في عشر ثوانٍ:

@Test
void une_commande_expediee_ne_peut_plus_etre_annulee() {
    Client client = new Client(1L, "Alice", "alice@example.com", "12 rue des Lilas",
                               "75011", "Paris", "FR", true, false, null,
                               LocalDate.of(2024, 1, 1), Statut.ACTIF, 0, null);
    Commande commande = new Commande(10L, client, List.of(
        new Ligne(1L, "REF-1", 2, new BigDecimal("19.99"), new BigDecimal("0.20"))),
        LocalDateTime.now(), StatutCommande.EXPEDIEE, null, null, "FR", false);

    assertThatThrownBy(() -> service.annuler(commande)).isInstanceOf(CommandeExpedieeException.class);
}

هذا مستحيل. فالتفصيل الوحيد المهم — StatutCommande.EXPEDIEE — ضائع وسط ثماني عشرة قيمة لا علاقة لها بغرض الاختبار. وفي اليوم الذي يُضاف فيه حقل إلى المُنشئ (constructor)، تتوقف الاختبارات الثمانون المبنية على هذا النموذج عن الترجمة دفعة واحدة.

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

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!