package com.netflix.governator.test.mock.spock;
import org.spockframework.mock.MockUtil;
import com.netflix.governator.guice.test.mocks.MockHandler;
import spock.lang.Specification;
import spock.mock.DetachedMockFactory;
public class SpockMockHandler implements MockHandler {
private final DetachedMockFactory mock = new DetachedMockFactory();
private final MockUtil mockUtil = new MockUtil();
private Specification specification;
@Override
public <T> T createMock(Class<T> classToMock) {
T mocked = mock.Mock(classToMock);
mockUtil.attachMock(mocked, getSpecification());
return mocked;
}
@Override
public <T> T createMock(Class<T> classToMock, Object args) {
return createMock(classToMock);
}
@Override
public <T> T createSpy(T objectToSpy) {
T spy = mock.Spy(objectToSpy);
mockUtil.attachMock(spy, getSpecification());
return spy;
}
@Override
public void resetMock(Object mockToReset) {
mockUtil.detachMock(mockToReset);
mockUtil.attachMock(mockToReset, specification);
}
public Specification getSpecification() {
return specification;
}
public void setSpecification(Specification specification) {
this.specification = specification;
}
}