package org.spockframework.spring.xml; import java.util.Collections; import spock.mock.DetachedMockFactory; import org.spockframework.mock.MockNature; import org.springframework.beans.factory.FactoryBean; /** * Takes care of instantiating detached spock Mocks. * * Spring integration of spock mocks is heavily inspired by * Springokito {@see https://bitbucket.org/kubek2k/springockito}. * * @author Leonard Bruenings */ public class SpockMockFactoryBean<T> implements FactoryBean<T> { private final Class<T> targetClass; private String name; private String mockNature = MockNature.MOCK.name(); private T instance; public SpockMockFactoryBean (Class<T> targetClass) { this.targetClass = targetClass; } @SuppressWarnings("unchecked") public T getObject() throws Exception { if (instance == null) { MockNature nature = MockNature.valueOf(mockNature.toUpperCase()); instance = new DetachedMockFactory().createMock(name, targetClass, nature, Collections.<String, Object>emptyMap()); } return instance; } public Class<?> getObjectType() { return targetClass; } public boolean isSingleton() { return true; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMockNature() { return mockNature; } public void setMockNature(String mockNature) { this.mockNature = mockNature; } }