Search in sources :

Example 1 with InstantiationException

use of org.mockito.creation.instance.InstantiationException in project mockito by mockito.

the class InlineDelegateByteBuddyMockMaker method newInstance.

@Override
@SuppressWarnings("unchecked")
public <T> T newInstance(Class<T> cls) throws InstantiationException {
    Constructor<?>[] constructors = cls.getDeclaredConstructors();
    if (constructors.length == 0) {
        throw new InstantiationException(cls.getName() + " does not define a constructor");
    }
    Constructor<?> selected = constructors[0];
    for (Constructor<?> constructor : constructors) {
        if (Modifier.isPublic(constructor.getModifiers())) {
            selected = constructor;
            break;
        }
    }
    Class<?>[] types = selected.getParameterTypes();
    Object[] arguments = new Object[types.length];
    int index = 0;
    for (Class<?> type : types) {
        arguments[index++] = makeStandardArgument(type);
    }
    MemberAccessor accessor = Plugins.getMemberAccessor();
    try {
        return (T) accessor.newInstance(selected, callback -> {
            mockitoConstruction.set(true);
            try {
                return callback.newInstance();
            } finally {
                mockitoConstruction.set(false);
            }
        }, arguments);
    } catch (Exception e) {
        throw new InstantiationException("Could not instantiate " + cls.getName(), e);
    }
}
Also used : SuppressSignatureCheck(org.mockito.internal.SuppressSignatureCheck) java.util(java.util) ByteBuddyAgent(net.bytebuddy.agent.ByteBuddyAgent) EXCLUDES(org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.EXCLUDES) MockCreationSettings(org.mockito.mock.MockCreationSettings) Platform(org.mockito.internal.util.Platform) JarFile(java.util.jar.JarFile) Constructor(java.lang.reflect.Constructor) Function(java.util.function.Function) MockitoException(org.mockito.exceptions.base.MockitoException) ConstructorInstantiator(org.mockito.internal.creation.instance.ConstructorInstantiator) JarEntry(java.util.jar.JarEntry) StringUtil.join(org.mockito.internal.util.StringUtil.join) MemberAccessor(org.mockito.plugins.MemberAccessor) BiConsumer(java.util.function.BiConsumer) WeakConcurrentMap(org.mockito.internal.util.concurrent.WeakConcurrentMap) MockHandler(org.mockito.invocation.MockHandler) JarOutputStream(java.util.jar.JarOutputStream) Instantiator(org.mockito.creation.instance.Instantiator) MockedConstruction(org.mockito.MockedConstruction) MockitoInitializationException(org.mockito.exceptions.base.MockitoInitializationException) Predicate(java.util.function.Predicate) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Plugins(org.mockito.internal.configuration.plugins.Plugins) DetachedThreadLocal(org.mockito.internal.util.concurrent.DetachedThreadLocal) File(java.io.File) InlineMockMaker(org.mockito.plugins.InlineMockMaker) Instrumentation(java.lang.instrument.Instrumentation) InstantiationException(org.mockito.creation.instance.InstantiationException) Modifier(java.lang.reflect.Modifier) MockitoConfigurationException(org.mockito.exceptions.misusing.MockitoConfigurationException) InputStream(java.io.InputStream) Constructor(java.lang.reflect.Constructor) MockitoException(org.mockito.exceptions.base.MockitoException) MockitoInitializationException(org.mockito.exceptions.base.MockitoInitializationException) IOException(java.io.IOException) InstantiationException(org.mockito.creation.instance.InstantiationException) MockitoConfigurationException(org.mockito.exceptions.misusing.MockitoConfigurationException) MemberAccessor(org.mockito.plugins.MemberAccessor) InstantiationException(org.mockito.creation.instance.InstantiationException)

Example 2 with InstantiationException

use of org.mockito.creation.instance.InstantiationException in project mockito by mockito.

the class InlineDelegateByteBuddyMockMaker method doCreateMock.

private <T> T doCreateMock(MockCreationSettings<T> settings, MockHandler handler, boolean nullOnNonInlineConstruction) {
    Class<? extends T> type = createMockType(settings);
    try {
        T instance;
        if (settings.isUsingConstructor()) {
            instance = new ConstructorInstantiator(settings.getOuterClassInstance() != null, settings.getConstructorArgs()).newInstance(type);
        } else {
            try {
                // We attempt to use the "native" mock maker first that avoids
                // Objenesis and Unsafe
                instance = newInstance(type);
            } catch (InstantiationException ignored) {
                if (nullOnNonInlineConstruction) {
                    return null;
                }
                Instantiator instantiator = Plugins.getInstantiatorProvider().getInstantiator(settings);
                instance = instantiator.newInstance(type);
            }
        }
        MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor(handler, settings);
        mocks.put(instance, mockMethodInterceptor);
        if (instance instanceof MockAccess) {
            ((MockAccess) instance).setMockitoInterceptor(mockMethodInterceptor);
        }
        return instance;
    } catch (InstantiationException e) {
        throw new MockitoException("Unable to create mock instance of type '" + type.getSimpleName() + "'", e);
    }
}
Also used : ConstructorInstantiator(org.mockito.internal.creation.instance.ConstructorInstantiator) MockitoException(org.mockito.exceptions.base.MockitoException) ConstructorInstantiator(org.mockito.internal.creation.instance.ConstructorInstantiator) Instantiator(org.mockito.creation.instance.Instantiator) InstantiationException(org.mockito.creation.instance.InstantiationException)

Example 3 with InstantiationException

use of org.mockito.creation.instance.InstantiationException in project mockito by mockito.

the class JavaEightUtil method getStaticFieldValue.

/**
 * Gets a value of the classes' field using reflection to stay backwards-compatible with older JDKs.
 *
 * @param fqcn The fully qualified class name of the type to be produced.
 * @param fieldName The name of th classes' field which value is going to be returned.
 * @return the restored value.
 */
private static Object getStaticFieldValue(final String fqcn, final String fieldName) {
    try {
        final Class<?> type = getClass(fqcn);
        final Field field = type.getField(fieldName);
        return field.get(null);
    // any exception is really unexpected since the type name has
    // already been verified
    } catch (Exception e) {
        throw new InstantiationException(String.format("Could not get %s#%s(): %s", fqcn, fieldName, e), e);
    }
}
Also used : Field(java.lang.reflect.Field) InstantiationException(org.mockito.creation.instance.InstantiationException) InstantiationException(org.mockito.creation.instance.InstantiationException)

Aggregations

InstantiationException (org.mockito.creation.instance.InstantiationException)3 Instantiator (org.mockito.creation.instance.Instantiator)2 MockitoException (org.mockito.exceptions.base.MockitoException)2 ConstructorInstantiator (org.mockito.internal.creation.instance.ConstructorInstantiator)2 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Instrumentation (java.lang.instrument.Instrumentation)1 Constructor (java.lang.reflect.Constructor)1 Field (java.lang.reflect.Field)1 Modifier (java.lang.reflect.Modifier)1 java.util (java.util)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 BiConsumer (java.util.function.BiConsumer)1 Function (java.util.function.Function)1 Predicate (java.util.function.Predicate)1 JarEntry (java.util.jar.JarEntry)1 JarFile (java.util.jar.JarFile)1 JarOutputStream (java.util.jar.JarOutputStream)1