كائن المجال مع Lombok: Battle Classic

كائن المجال ( الروسية. "كائن المجال" ) - أحد أكثر الطرق شيوعًا لاستخدام بيانات الاختبار مباشرةً في منطق البرنامج النصي. في الوقت الحالي ، تعد واحدة من أكثر الطرق انتشارًا والأكثر انتشارًا بسبب بساطتها وشمولها ومنطقها.

إنه قابل للتطبيق في جميع أنواع أتمتة الاختبارات الوظيفية (نهاية إلى نهاية ، واجهة برمجة تطبيقات ، تكامل) ، بغض النظر عن النظام الأساسي الذي يتم اختباره ، سواء كان الويب أو الجوال أو سطح المكتب.
هام : لا تخلط بين كائن المجال وكائن نقل البيانات (DTO) . هذه هي طرق مختلفة تماما التي يتم تطبيقها في مجالات مختلفة.
ما هو جوهرها؟

من اسم آخر للمنهج - "كائن الأعمال" - يصبح من الواضح أن هذا نوع من التجريد ، وهو نموذج ووصف لكائن مهم لفهم وعمل منطق العمل للتطبيق . إنه غير قادر على أداء أي وظائف بخلاف "نقل" الحقول وقيمها إلى وحدة أعمال واحدة محددة.
الصورة



كيف تبدو؟


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

//    User public class User { // ,  User    Login private String login; // ,  User    Password private String password; } 

ستلاحظ الحقول التي تتسم بالحرص الشديد أن جميع الحقول الداخلية خاصة. يعتبر إعداد وقراءة القيم مباشرةً من حقول الكائن ممارسة سيئة. بدلاً من ذلك ، من المعتاد استخدام الحروف والأدوات المعروفة:

 public class User { private String login; private String password; //      login public void setLogin(String login) { this.login = login; } //     login public String getLogin() { return this.login; } //    public void setPassword(String password) { this.password = password; } public String getPassword() { return this.password; } } 

الآن ، لدينا حق الوصول إلى الحقول ، ويمكننا تعيين وقراءة قيمهم. لكن في هذا المثال ، نستخدم حقلين فقط. وماذا يحدث إذا كان هناك خمسة عشر من هذه الحقول؟ صحيح أن فئة المستخدم تتوسع إلى أحجام غير مسبوقة ، وذلك بفضل لصق نسخة لا نهائية من الحروف والأدوات. كيف سنتعامل مع هذا؟



السحر lombok


هذا هو المكان الذي يأتي فيه Project Lombok إلى الإنقاذ - مكتبة شائعة تتيح لنا تقليل الشفرة عدة مرات ، وتجنب معاناة النسخ / اللصق ، وتقليل مقدار الوقت اللازم لكتابة فصول كائن البيانات إلى حد كبير. بعض الروابط المفيدة:


ماذا يفعل؟ يقوم تلقائيًا بإنشاء مجموعات وتثبيتات لجميع حقول الفصل ، من خلال تعيين التعليق التوضيحي المقابل:

 import lombok.Getter; import lombok.Setter; //       User @Getter //       User @Setter public class User { private String login; private String password; } 

بسيطة وسريعة ومريحة. وبالتالي ، يصبح كودنا أكثر قابلية للقراءة ، والفصول الدراسية أكثر إيجازًا ، والتطور أسرع.



تطبق في الاختبار


الاختبار الجيد هو اختبار يتم فيه فصل بيانات الاختبار ومنطق الاختبار وتنفيذه بوضوح.

دعونا نحاول تسجيل الدخول مستخدمنا. ننشئ فئة مع بيانات الاختبار ، و "ملء" لهم مستخدم جديد:

 //  Test Data  public class TestDataUser { //  private-    private final static String DEFAULT_LOGIN = "vasiliy_pupkin"; private final static String DEFAULT_PASSWORD = "q1w2e3"; //        public static User getDefaultUser() { //  ""  User user = new User(); //      Login user.setLogin(DEFAULT_LOGIN); //      Password user.setPassword(DEFAULT_PASSWORD); //    User,     return user; } } 

وصفنا نموذج صفحة تسجيل الدخول:

 public class LoginPage { //  public- ,    User public void loginUser(User user) { //          enterLogin() enterLogin(user.getLogin()); //    enterPassword(user.getPassword()); } private void enterLogin(String login) { this.loginInput.sendKeys(login); } private void enterPassword(String password) { this.passwordInput.sendKeys(password); } } 

يبقى فقط لتنفيذ فئة الاختبار:

 public class LoginTest { @Test public void loginAsDefaultUser() { //    credentials   User user = TestDataUser.getDefaultUser(); //  Login- LoginPage loginPage = new LoginPage(); // ,     loginPage.loginUser(user); } } 

انتهى أنت رائع!


لتلخيص


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

يجب أن يكون هناك السلبيات؟

  1. الحصانة. أو بالأحرى غيابه. في هذا ، يفقد هذا النهج باستخدام لومبوك المنافس الرئيسي - باني ( مقال عن Habré ). ولكن ، في رأيي ، الكود أعلاه هو "نظيف" ومفهوم وممتع من الناحية الجمالية ، مقارنة بالسلسلة التي لا تنتهي في المنشئ وكومة الطرق في فئة الكائن.
  2. زيادة التعقيد حيث لا تكون هناك حاجة لذلك. ليس كثيرا ناقص كتذكير صغير. أي نهج أو نمط هو مشكلة ويجب حل مشكلة معينة. يجب ألا تحاول استخدام "كائن البيانات" في اختبار وحدة يتحقق فقط من 2 + 2 = 4.

شكرا جزيلا لاهتمامكم سوف أكون سعيدًا بالمراجعات والنقد.

ملاحظة أخبر في التعليقات ما هي النهج التي تستخدمها في عملك. سيكون من المثير للاهتمام للغاية أن تقرأ.

Source: https://habr.com/ru/post/ar442606/


All Articles