Java 类org.springframework.test.context.TestPropertySource 实例源码

项目:spring4-understanding    文件:TestPropertySourceUtils.java   
static MergedTestPropertySources buildMergedTestPropertySources(Class<?> testClass) {
    Class<TestPropertySource> annotationType = TestPropertySource.class;
    AnnotationDescriptor<TestPropertySource> descriptor = findAnnotationDescriptor(testClass, annotationType);
    if (descriptor == null) {
        return new MergedTestPropertySources();
    }

    // else...
    List<TestPropertySourceAttributes> attributesList = resolveTestPropertySourceAttributes(testClass);
    String[] locations = mergeLocations(attributesList);
    String[] properties = mergeProperties(attributesList);
    return new MergedTestPropertySources(locations, properties);
}
项目:spring4-understanding    文件:TestPropertySourceUtils.java   
private static List<TestPropertySourceAttributes> resolveTestPropertySourceAttributes(Class<?> testClass) {
    Assert.notNull(testClass, "Class must not be null");

    final List<TestPropertySourceAttributes> attributesList = new ArrayList<TestPropertySourceAttributes>();
    final Class<TestPropertySource> annotationType = TestPropertySource.class;
    AnnotationDescriptor<TestPropertySource> descriptor = findAnnotationDescriptor(testClass, annotationType);
    Assert.notNull(descriptor, String.format(
        "Could not find an 'annotation declaring class' for annotation type [%s] and class [%s]",
        annotationType.getName(), testClass.getName()));

    while (descriptor != null) {
        TestPropertySource testPropertySource = descriptor.synthesizeAnnotation();
        Class<?> rootDeclaringClass = descriptor.getRootDeclaringClass();

        if (logger.isTraceEnabled()) {
            logger.trace(String.format("Retrieved @TestPropertySource [%s] for declaring class [%s].",
                testPropertySource, rootDeclaringClass.getName()));
        }

        TestPropertySourceAttributes attributes = new TestPropertySourceAttributes(rootDeclaringClass,
            testPropertySource);
        if (logger.isTraceEnabled()) {
            logger.trace("Resolved TestPropertySource attributes: " + attributes);
        }
        attributesList.add(attributes);

        descriptor = findAnnotationDescriptor(rootDeclaringClass.getSuperclass(), annotationType);
    }

    return attributesList;
}
项目:spring4-understanding    文件:TestPropertySourceAttributes.java   
/**
 * Create a new {@code TestPropertySourceAttributes} instance for the
 * supplied {@link TestPropertySource @TestPropertySource} annotation and
 * the {@linkplain Class test class} that declared it, enforcing
 * configuration rules and detecting a default properties file if
 * necessary.
 * @param declaringClass the class that declared {@code @TestPropertySource}
 * @param testPropertySource the annotation from which to retrieve the attributes
 * @since 4.2
 */
TestPropertySourceAttributes(Class<?> declaringClass, TestPropertySource testPropertySource) {
    this(declaringClass, testPropertySource.locations(), testPropertySource.inheritLocations(),
        testPropertySource.properties(), testPropertySource.inheritProperties());
}