/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.integration.springframework;
import mockit.*;
import mockit.internal.injection.*;
import mockit.internal.state.*;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.support.*;
/**
* If applied, this mock-up will take over calls to {@link AbstractBeanFactory#getBean(String)} in any implementation
* class, returning instead a {@link Tested @Tested} or {@link Injectable @Injectable} object with the given field name,
* or a dependency object injected at any level into a {@code @Tested} object.
* <p/>
* In case said calls come (indirectly) from a test class having no {@code @Tested} fields, bean lookup will proceed
* into the actual {@code getBean(String)} implementation method.
* <p/>
* Note this mock-up is only useful if the code under test makes direct calls to Spring's {@code getBean(name)} method.
*/
public final class BeanFactoryMockUp extends MockUp<AbstractBeanFactory>
{
@Mock
public static Object getBean(Invocation invocation, String name)
{
TestedClassInstantiations testedClasses = TestRun.getTestedClassInstantiations();
if (testedClasses == null) {
return invocation.proceed();
}
Object bean = testedClasses.getBeanExporter().getBean(name);
if (bean == null) {
throw new NoSuchBeanDefinitionException(name);
}
return bean;
}
}