Coverage Report - org.doxla.spring.automock.AutoMockExposingPostProcessor
 
Classes in this File Line Coverage Branch Coverage Complexity
AutoMockExposingPostProcessor
86% 
100% 
0
 
 1  
 /**
 2  
    Copyright 2007 Dan Oxlade
 3  
 
 4  
    Licensed under the Apache License, Version 2.0 (the "License");
 5  
    you may not use this file except in compliance with the License.
 6  
    You may obtain a copy of the License at
 7  
 
 8  
        http://www.apache.org/licenses/LICENSE-2.0
 9  
 
 10  
    Unless required by applicable law or agreed to in writing, software
 11  
    distributed under the License is distributed on an "AS IS" BASIS,
 12  
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
    See the License for the specific language governing permissions and
 14  
    limitations under the License.
 15  
  */
 16  
 package org.doxla.spring.automock;
 17  
 
 18  
 import java.util.Collection;
 19  
 
 20  
 import org.doxla.spring.automock.resolver.DefaultProxyMockNameResolver;
 21  
 import org.doxla.spring.automock.resolver.MockClassResolver;
 22  
 import org.doxla.spring.automock.resolver.ProxyMockNameResolver;
 23  
 import org.jmock.cglib.Mock;
 24  
 import org.springframework.beans.BeansException;
 25  
 import org.springframework.beans.factory.annotation.Required;
 26  
 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
 27  
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 28  
 
 29  
 /**
 30  
  * Expose 2 beans inside the spring container for each class that {@link MockClassResolver} resolves.
 31  
  * One will be the {@link Mock} and the other will be the proxy of that {@link Mock}.
 32  
  * The bean names will be resolved by the provided {@link ProxyMockNameResolver} or the {@link DefaultProxyMockNameResolver}
 33  
  * by default.
 34  
  * 
 35  
  * @see MockClassResolver
 36  
  * @see ProxyMockNameResolver
 37  
  * @see DefaultProxyMockNameResolver
 38  
  * @see Mock
 39  
  *  
 40  
  * @author dano
 41  
  */
 42  2
 public class AutoMockExposingPostProcessor implements BeanFactoryPostProcessor {
 43  
         
 44  
         private MockClassResolver mockClassResolver;
 45  2
         private ProxyMockNameResolver proxyMockNameResolver = new DefaultProxyMockNameResolver();
 46  
 
 47  
         public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
 48  2
                 Collection<Class> mockClasses = mockClassResolver.resolveClassesToMock(beanFactory);
 49  2
                 for (Class clazz : mockClasses) {
 50  
 
 51  3
                         Mock mock = new Mock(clazz);
 52  3
                         Object proxy = mock.proxy();
 53  
                         
 54  3
                         beanFactory.registerSingleton(proxyMockNameResolver.mockNameFromClass(clazz), mock);
 55  3
                         beanFactory.registerSingleton(proxyMockNameResolver.proxyNameFromClass(clazz), proxy);
 56  
                         
 57  3
                 }
 58  2
         }
 59  
 
 60  
         @Required
 61  
         public void setMockClassResolver(MockClassResolver mockClassResolver) {
 62  2
                 this.mockClassResolver = mockClassResolver;
 63  2
         }
 64  
 
 65  
         public void setProxyMockNameResolver(ProxyMockNameResolver proxyMockNameResolver) {
 66  0
                 this.proxyMockNameResolver = proxyMockNameResolver;
 67  0
         }
 68  
 
 69  
 }