أسهل طريقة للتحقق برمجيًا من أن الفصل لديه تعريف JPA صالح

StackOverflow https://stackoverflow.com/questions/2262819

سؤال

أنا أعمل مع العديد من الفصول الدراسية التي تم شرحها javax.persistence.Entity وما شابه ذلك.يدور مشروعي حول إنشاء بيانات وصفية حول الفئات المشروحة بـ JPA بدلاً من الثبات في حد ذاته، لذلك أستخدمها كحالات اختبار.

بدلاً من تشغيل Hibernate أو أي مزود JPA آخر، أود التحقق برمجيًا - جزء من اختبارات الوحدة الخاصة بي - من أن إعلانات JPA الخاصة بي صالحة بالفعل.

ما هي أسهل طريقة للقيام بذلك؟

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

المحلول

ومجرد خلق أبسط SessionFactory ممكن أو أيا كان EclipseLink أو OpenJPA توفير وراء EntityManagerFactory والسماح لهم التحقق من صحة ذلك (باستخدام بعض دمية قاعدة البيانات في الذاكرة، إذا لزم الأمر). انها معقدة جدا لإعادة اختراعها.

لالسبات وهذا يمكن أن يتم ذلك باستخدام Configuration.buildMappings:

@RunWith(Theories.class)
public class EntitiesAreValidTest {

    @DataPoints
    public static Class<?>[] entities = new Class[] {
        SimpleEntity.class,
        SimpleEntityWithTransientField.class,
        TwoFieldEntity.class
    };

    @Theory
    public void classHasValidConfiguration(Class<?> entityClass) {

        new AnnotationConfiguration().addAnnotatedClass(entityClass).buildMappings();
    }
}

نصائح أخرى

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

وأنا لست متأكدا مما اذا كان هناك طريقة أسهل ولكن يمكنك استخدام التأمل للوصول إلى شروح من فئة

Class class = Example.class;
Annotation[] annotations = class.getAnnotations();

إذا كنت لا تثق بموفري JPA (أو لا ترغب في استخدامها)، فحاول التوفيق بين تعليقات JPA التوضيحية (بيانات التعريف) التي تم استردادها باستخدام الانعكاس مع بيانات تعريف JDBC التي تم استردادها باستخدام ResultSetMetaData (على سبيل المثال انظر هنا).

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

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