/** * Resolve the Mockito proxy class if it is marked as such. * <p/> * <p>Uses the fields {@link #typeToMock} and {@link #extraInterfaces} to * create the Mockito proxy class as the <code>ObjectStreamClass</code> * doesn't carry useful information for this purpose.</p> * * @param desc Description of the class in the stream, not used. * @return The class that will be used to deserialize the instance mock. * @throws IOException * @throws ClassNotFoundException */ @Override protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { if (notMarkedAsAMockitoMock(readObject())) { return super.resolveClass(desc); } // TODO check the class is mockable in the deserialization side // ClassImposterizer.INSTANCE.canImposterise(typeToMock); // create the Mockito mock class before it can even be deserialized //TODO SF unify creation of imposterizer, constructor code duplicated ClassImposterizer imposterizer = new ClassImposterizer(new InstantiatorProvider().getInstantiator(new CreationSettings())); imposterizer.setConstructorsAccessible(typeToMock, true); Class<?> proxyClass = imposterizer.createProxyClass( typeToMock, extraInterfaces.toArray(new Class[extraInterfaces.size()]) ); hackClassNameToMatchNewlyCreatedClass(desc, proxyClass); return proxyClass; }
private static <T> CreationSettings<T> validatedSettings(Class<T> typeToMock, CreationSettings<T> source) { MockCreationValidator validator = new MockCreationValidator(); validator.validateType(typeToMock); validator.validateExtraInterfaces(typeToMock, source.getExtraInterfaces()); validator.validateMockedType(typeToMock, source.getSpiedInstance()); //TODO SF - add this validation and also add missing coverage // validator.validateDelegatedInstance(classToMock, settings.getDelegatedInstance()); CreationSettings<T> settings = new CreationSettings<T>(source); settings.setMockName(new MockNameImpl(source.getName(), typeToMock)); settings.setTypeToMock(typeToMock); settings.setExtraInterfaces(prepareExtraInterfaces(source)); return settings; }
private static <T> CreationSettings<T> validatedSettings(Class<T> typeToMock, CreationSettings<T> source) { MockCreationValidator validator = new MockCreationValidator(); validator.validateType(typeToMock); validator.validateExtraInterfaces(typeToMock, source.getExtraInterfaces()); validator.validateMockedType(typeToMock, source.getSpiedInstance()); //TODO SF - add this validation and also add missing coverage // validator.validateDelegatedInstance(classToMock, settings.getDelegatedInstance()); validator.validateSerializable(typeToMock, source.isSerializable()); CreationSettings<T> settings = new CreationSettings<T>(source); settings.setMockName(new MockNameImpl(source.getName(), typeToMock)); settings.setTypeToMock(typeToMock); settings.setExtraInterfaces(prepareExtraInterfaces(source)); return settings; }
private static Set<Class> prepareExtraInterfaces(CreationSettings settings) { Set<Class> interfaces = new HashSet<Class>(settings.getExtraInterfaces()); if(settings.isSerializable()) { interfaces.add(Serializable.class); } if (settings.getSpiedInstance() != null) { interfaces.add(MockitoSpy.class); } return interfaces; }
private static Set<Class> prepareExtraInterfaces(CreationSettings settings) { Set<Class> interfaces = new HashSet<Class>(settings.getExtraInterfaces()); if(settings.isSerializable()) { interfaces.add(Serializable.class); } return interfaces; }
public void maybeRedefineMockName(Object mock, String newName) { MockName mockName = getMockName(mock); //TODO SF hacky... if (mockName.isDefault() && getMockHandler(mock).getMockSettings() instanceof CreationSettings) { ((CreationSettings) getMockHandler(mock).getMockSettings()).setMockName(new MockNameImpl(newName)); } }
protected GenericMetadataSupport actualParameterizedType(Object mock) { CreationSettings mockSettings = (CreationSettings) new MockUtil().getMockHandler(mock).getMockSettings(); return GenericMetadataSupport.inferFrom(mockSettings.getTypeToMock()); }