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.validateConstructorUse(source.isUsingConstructor(), source.getSerializableMode()); //TODO SF - I don't think we really need CreationSettings type //TODO do we really need to copy the entire settings every time we create mock object? it does not seem necessary. CreationSettings<T> settings = new CreationSettings<T>(source); settings.setMockName(new MockNameImpl(source.getName(), typeToMock)); settings.setTypeToMock(typeToMock); settings.setExtraInterfaces(prepareExtraInterfaces(source)); return settings; }
public Object answer(InvocationOnMock invocation) throws Throwable { Class<?> clz = invocation.getMethod().getReturnType(); if (!new MockCreationValidator().isTypeMockable(clz)) { return delegate.answer(invocation); } return getMock(invocation); }
public <T> T createMock(Class<T> classToMock, MockSettingsImpl settings) { creationValidator.validateType(classToMock); creationValidator.validateExtraInterfaces(classToMock, settings.getExtraInterfaces()); creationValidator.validateMockedType(classToMock, settings.getSpiedInstance()); settings.initiateMockName(classToMock); MockHandler<T> mockHandler = new MockHandler<T>(settings); InvocationNotifierHandler<T> invocationNotifierHandler = new InvocationNotifierHandler<T>(mockHandler, settings); MethodInterceptorFilter filter = new MethodInterceptorFilter(invocationNotifierHandler, settings); Class<?>[] interfaces = settings.getExtraInterfaces(); Class<?>[] ancillaryTypes; if (settings.isSerializable()) { ancillaryTypes = interfaces == null ? new Class<?>[] {Serializable.class} : new ArrayUtils().concat(interfaces, Serializable.class); } else { ancillaryTypes = interfaces == null ? new Class<?>[0] : interfaces; } Object spiedInstance = settings.getSpiedInstance(); T mock = ClassImposterizer.INSTANCE.imposterise(filter, classToMock, ancillaryTypes); if (spiedInstance != null) { new LenientCopyTool().copyToMock(spiedInstance, mock); } return mock; }
public MockUtil() { this(new MockCreationValidator()); }
public void validateType(Class classToMock) { if (!isTypeMockable(classToMock)) { new Reporter().cannotMockFinalClass(classToMock); } }
public void validateType(Class classToMock) { if (!isTypeMockable(classToMock)) { new Reporter().cannotMockFinalClass(classToMock); } }
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; }
public Object answer(InvocationOnMock invocation) throws Throwable { Class<?> clz = invocation.getMethod().getReturnType(); if (!new MockCreationValidator().isTypeMockable(clz)) return delegate.answer(invocation); return getMock(invocation); }