Чтобы написать интеграционный тест с Spring, я хочу загрузить контекст тестового приложения с помощью специального загрузчика классов. Причина в том, что мы используем LoadTimeWeaver (org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver или org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver). К сожалению, по умолчанию Sun classLoader не предоставляет необходимый метод addTransformer, требуемый LoadTimeWeaver. Используя javaagent с sprint-instrument.jar на vm startup, все работает отлично.Загрузка теста интеграции интеграции Spring с инструментами
Но это не является допустимым вариантом для тестов, которые должны быть запущены из разных машин, Ид и т.д.
Я попробовал простое решение, продлив GenericXmlContextLoader и установив SimpleInstrumentableClassLoader для моего контекста загрузчика:
@ContextConfiguration(locations = { "classpath:/spring/_context.xml" }, loader = CustomApplicationContextLoader.class)
и
public class CustomApplicationContextLoader extends GenericXmlContextLoader {
@Override
protected void prepareContext(final GenericApplicationContext context) {
super.prepareContext(context);
context.setClassLoader(new SimpleInstrumentableClassLoader(ClassUtils.getDefaultClassLoader()));
}
}
Это привело к ошибкам, как
Class [org.springframework.context.config.ContextNamespaceHandler] for namespace [http://www.springframework.org/schema/context] does not implement the [org.springframework.beans.factory.xml.NamespaceHandler] interface
возможно, потому что некоторые классы загружаются загрузчиком классов по умолчанию, а некоторые классы загружаются загрузчиком класса инструментария.
У вас есть хорошее решение?
Благодарим за помощь! Chris
У вас есть все весенние банки на пути к классам? Какие у вас есть? –
Хотя, вероятно, не все релевантно: spring-context, spring-web, spring-jms, spring-test, spring-security-core, spring-security-web, spring-security-config, spring-data-jpa, spring -datacommons-cor, spring-tx, spring-webmvc, весенний инструмент, весенний инструмент-кошка – user3022028