Log non-loadable TestExecutionListener classes at debug level only

Issue: SPR-16369
This commit is contained in:
Juergen Hoeller 2018-01-12 16:47:46 +01:00
parent 93f645800b
commit a15975d94d
1 changed files with 9 additions and 26 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -29,7 +28,6 @@ import java.util.Set;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanInstantiationException;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.AnnotationUtils;
@ -110,9 +108,6 @@ public abstract class AbstractTestContextBootstrapper implements TestContextBoot
getCacheAwareContextLoaderDelegate()); getCacheAwareContextLoaderDelegate());
} }
/**
* {@inheritDoc}
*/
@Override @Override
public final List<TestExecutionListener> getTestExecutionListeners() { public final List<TestExecutionListener> getTestExecutionListeners() {
Class<?> clazz = getBootstrapContext().getTestClass(); Class<?> clazz = getBootstrapContext().getTestClass();
@ -165,48 +160,36 @@ public abstract class AbstractTestContextBootstrapper implements TestContextBoot
} }
} }
Collection<Class<? extends TestExecutionListener>> classesToUse = classesList;
// Remove possible duplicates if we loaded default listeners. // Remove possible duplicates if we loaded default listeners.
if (usingDefaults) { if (usingDefaults) {
Set<Class<? extends TestExecutionListener>> classesSet = new HashSet<>(); classesToUse = new LinkedHashSet<>(classesList);
classesSet.addAll(classesList);
classesList.clear();
classesList.addAll(classesSet);
} }
List<TestExecutionListener> listeners = instantiateListeners(classesList); List<TestExecutionListener> listeners = instantiateListeners(classesToUse);
// Sort by Ordered/@Order if we loaded default listeners. // Sort by Ordered/@Order if we loaded default listeners.
if (usingDefaults) { if (usingDefaults) {
AnnotationAwareOrderComparator.sort(listeners); AnnotationAwareOrderComparator.sort(listeners);
} }
if (logger.isInfoEnabled()) { if (logger.isInfoEnabled()) {
logger.info(String.format("Using TestExecutionListeners: %s", listeners)); logger.info("Using TestExecutionListeners: " + listeners);
} }
return listeners; return listeners;
} }
private List<TestExecutionListener> instantiateListeners(List<Class<? extends TestExecutionListener>> classesList) { private List<TestExecutionListener> instantiateListeners(Collection<Class<? extends TestExecutionListener>> classesList) {
List<TestExecutionListener> listeners = new ArrayList<>(classesList.size()); List<TestExecutionListener> listeners = new ArrayList<>(classesList.size());
for (Class<? extends TestExecutionListener> listenerClass : classesList) { for (Class<? extends TestExecutionListener> listenerClass : classesList) {
NoClassDefFoundError ncdfe = null;
try { try {
listeners.add(BeanUtils.instantiateClass(listenerClass)); listeners.add(BeanUtils.instantiateClass(listenerClass));
} }
catch (NoClassDefFoundError err) { catch (NoClassDefFoundError err) {
ncdfe = err; if (logger.isDebugEnabled()) {
} logger.debug(String.format("Could not instantiate TestExecutionListener [%s]. " +
catch (BeanInstantiationException ex) {
if (ex.getCause() instanceof NoClassDefFoundError) {
ncdfe = (NoClassDefFoundError) ex.getCause();
}
}
if (ncdfe != null) {
if (logger.isInfoEnabled()) {
logger.info(String.format("Could not instantiate TestExecutionListener [%s]. " +
"Specify custom listener classes or make the default listener classes " + "Specify custom listener classes or make the default listener classes " +
"(and their required dependencies) available. Offending class: [%s]", "(and their required dependencies) available. Offending class: [%s]",
listenerClass.getName(), ncdfe.getMessage())); listenerClass.getName(), err.getMessage()));
} }
} }
} }