يجب تعليم تكوين فئة @التكوين للاختبار ؟
-
21-12-2019 - |
سؤال
قضيت بعض الوقت في حل مشكلة المفقودين org.joda.time.DateTime->java.util.Date
محول في الربيع البيانات (والتي يجب أن يتم تمكين افتراضيا عندما Joda الوقت على classpath).لقد وجدت السبب ، ولكنها ولدت سؤال حول @Configuration
الشرح في الربيع.
تطبيق معيار التكوين باستخدام AbstractMongoConfiguration
من الربيع-البيانات-mongodb:
@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }
الاختبار الذي صريحة يستخدم AppConfig فئة (مع سبوك, ولكن داخليا الآليات المنصوص عليها الربيع-اختبار تستخدم):
@ContextConfiguration(classes = AppConfig)
class JodaDocRepositorySpec extends Specification {
@Autowired
private JodaDocRepository jodaDocRepository
def "save document with DateTime"() {
given:
def jodaDoc = new JodaDoc(DateTime.now())
when:
def savedJodaDoc = jodaDocRepository.save(jodaDoc)
then:
savedJodaDoc.id
}
}
أنه يعمل بشكل جيد.ولكن عندما @التكوين الشرح في AppConfig هو إزالة/علق:
//@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }
فشل الاختبار مع:
org.springframework.core.convert.ConverterNotFoundException:
No converter found capable of converting from type org.joda.time.DateTime to type java.util.Date
AFAIK أنه ليست هناك حاجة لاستخدام @Configuration
لتكوين الطبقة عندما الصريحة المسجلة في سياق (من قبل الطبقات في @ContextConfiguration
أو register()
طريقة AnnotationConfigWebApplicationContext
).الطبقات يتم معالجتها على أي حال وكل أعلن الفول وجدت.فمن المفيد أحيانا إلى عدم استخدام @Configuration
لمنع كشف من قبل مكون المسح الضوئي عندما يكون هناك 2 مماثل تكوين الطبقات في نفس الحزم في سياق اختبار المستخدمة من قبل مختلف الاختبارات.
لذلك أعتقد أنه يمكن أن الخلل في الربيع الذي يسبب مختلفة الداخلية تجهيز الفول في سياق اعتمادا على الاستخدام أو لا @Configuration
الشرح.قارنت الربيع سجلات هذه الحالات هناك بعض الاختلافات, ولكن أنا لست قادرا على تحديد ما هي تسببوا في الربيع الطبقات الداخلية.قبل أن علة تقديم أود أن أسأل:
سؤالي. هل هناك تفسير السبب في الربيع لنفس فئة التكوين (أشار صراحة في @ContextConfiguration
) يستخدم (أو لا) محولات Joda الوقت اعتمادا على وجود @Configuration
الشرح?
أنا خلقت أيضا التشغيل السريع المشروع استنساخ هذه المسألة.الربيع-البيانات-mongodb 1.3.3, الربيع 4.0.0, joda الوقت 2.3.
المحلول
انها كل شيء على ما يرام في هذا السلوك. AbstractMongoConfiguration
هو مشروح من قبل @Configuration
, ولكن في الواقع هذا الشرح ليس @Inherited
, لذا عليك صراحة تعليم الفئة الخاصة بك.
عند إزالة @Configuration
الشرح ثم AppConfig
فئة ليست كامل التكوين.انها عمليات مثل لايت التكوين فقط لأنه يحتوي على أساليب المحشى @Bean
- يرجى الرجوع إلى أساليب في org.springframework.context.annotation.ConfigurationClassUtils
isFullConfigurationCandidate()
isLiteConfigurationCandidate()
isFullConfigurationClass()
أخيرا فقط كامل (المحشى @Configuration
) تكوين الطبقات العمليات وتعزيز التكوين ما بعد المعالجات أنظر ConfigurationClassPostProcessor.enhanceConfigurationClasses()