سؤال

أنا جديدة على كائنات وهمية, ولكن أنا أفهم أن أحتاج إلى دروس تنفيذ واجهات من أجل أن يسخر لهم.

المشكلة أنا أعاني من هو في طبقة الوصول إلى البيانات ، أريد أن أساليب ثابتة, ولكن لا يمكنني وضع أسلوب ثابت في واجهة.

ما هي أفضل طريقة للتغلب على هذا ؟ يجب فقط استخدام أساليب المثال (الذي يبدو خطأ) أو هل هناك حل آخر ؟

هل كانت مفيدة؟

المحلول

وأود أن استخدام أسلوب كائن نمط.يكون ثابت سبيل المثال هذا في أسلوب ثابت.وينبغي أن يكون من الممكن فرعية للاختبار ، اعتمادا على الاستهزاء الإطار.

أيفي الفئة الخاصة بك مع أسلوب ثابت لها:

private static final MethodObject methodObject = new MethodObject();

public static void doSomething(){
    methodObject.doSomething();
}

و الأسلوب الخاص بك يمكن أن يكون كائن بسيط جدا, بسهولة اختبار:

public class MethodObject {
    public void doSomething() {
        // do your thang
    }
}

نصائح أخرى

نعم ، يمكنك استخدام أساليب المثال.أساليب ثابتة في الأساس يقول "هناك طريقة واحدة لإنجاز هذه الوظيفة - انها ليست متعددة الأشكال." ساخرا تعتمد على تعدد الأشكال.

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

وجدت عبر مدونة جوجل مع بعض الأمثلة على كيفية القيام بذلك:

  1. ريفاكتور فئة مثيل فئة وتنفيذ واجهة.

    كنت قد ذكرت أنك لا تريد أن تفعل هذا.

  2. استخدام المجمع سبيل المثال فئة مع مندوبين عن ثابت أعضاء الطبقات

    تفعل هذا يمكنك محاكاة ثابت واجهة طريق المندوبين.

  3. استخدام المجمع سبيل المثال فئة مع حماية الأعضاء التي تتصل ثابت الدرجة

    وربما هذا هو أسهل وهمية/إدارة دون إعادة بيع ديون كما يمكن أن تكون موروثة من الموسعة.

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

لذلك دعونا نقول التعليمات البرمجية الخاصة بك مثل هذا:

public object GetData()
{
 object obj1 = GetDataFromWherever();
 object obj2 = TransformData(obj1);
 return obj2;
} 
private static object TransformData(object obj)
{
//Do whatever
}

أنت لا تحتاج إلى كتابة اختبار ضد TransformData طريقة (ولا تستطيع).بدلا من كتابة اختبار GetData طريقة الاختبارات العمل المنجز في TransformData.

استخدام أساليب المثال حيثما كان ذلك ممكنا.

استخدام الجمهور ثابت ظائفها[T, U] (ثابت وظيفة المراجع التي يمكن أن تكون بديلا عن وظائف وهمية) حيث أساليب المثال غير ممكن.

الحل بسيط هو السماح لتغيير ثابت الدرجة تنفيذ طريق واضع:

class ClassWithStatics {

  private IClassWithStaticsImpl implementation = new DefaultClassWithStaticsImpl();

  // Should only be invoked for testing purposes
  public static void overrideImplementation(IClassWithStaticsImpl implementation) {
     ClassWithStatics.implementation = implementation;
  }

  public static Foo someMethod() {
    return implementation.someMethod();
  }

}

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

المشكلة لديك عندما كنت تستخدم رمز 3rd الطرف ويسمى ذلك من الأساليب.ما انتهى به هو التفاف في كائن ، و الدعوة يمر مع dep inj ، ومن ثم اختبار وحدة يمكن أن تسخر 3rd الطرف أسلوب ثابت استدعاء اضع معها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top