Package org.powermock.core
Class ClassReplicaCreator
java.lang.Object
org.powermock.core.ClassReplicaCreator
This class takes care of creating a replica of a class. The class structure
is copied to the new class. This is useful in situations where you want to
create a mock for a class but it's not possible because of some restrictions
(such as the class being loaded by the bootstrap class-loader).
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate <T> void
addDelegatorField
(T delegator, javassist.CtClass replicaClass) Add a field to the replica class that holds the instance delegator.private void
copyFields
(javassist.CtClass originalClassAsCtClass, javassist.CtClass newClass) Class<?>
createClassReplica
(Class<?> clazz) <T> Class<T>
createInstanceReplica
(T delegator) Create a class that is a replica of typeT
.private <T> String
generateReplicaClassName
(Class<T> clazz) private static String
getParametersAsString
(String[] types) private String[]
getParameterTypes
(javassist.CtMethod ctMethod) private String
getReplicaMethodDelegationCode
(Class<?> clazz, javassist.CtMethod ctMethod, String classOrInstanceToDelegateTo)
-
Field Details
-
POWERMOCK_INSTANCE_DELEGATOR_FIELD_NAME
- See Also:
-
counter
-
-
Constructor Details
-
ClassReplicaCreator
public ClassReplicaCreator()
-
-
Method Details
-
createClassReplica
-
createInstanceReplica
Create a class that is a replica of typeT
. To allow for partial mocking all calls to non-mocked methods will be delegated to thedelegator
.- Type Parameters:
T
- The type of the replica class to be created.- Parameters:
delegator
- The delegator object that will be invoked to allow for partial mocking.- Returns:
- A replica class that can be used to duck-type an instance.
-
addDelegatorField
private <T> void addDelegatorField(T delegator, javassist.CtClass replicaClass) throws javassist.CannotCompileException Add a field to the replica class that holds the instance delegator. I.e. if we're creating a instance replica ofjava.lang.Long
this methods adds a new field of typedelegator.getClass()
to the replica class.- Throws:
javassist.CannotCompileException
-
generateReplicaClassName
-
copyFields
private void copyFields(javassist.CtClass originalClassAsCtClass, javassist.CtClass newClass) throws javassist.CannotCompileException, javassist.NotFoundException - Throws:
javassist.CannotCompileException
javassist.NotFoundException
-
getReplicaMethodDelegationCode
private String getReplicaMethodDelegationCode(Class<?> clazz, javassist.CtMethod ctMethod, String classOrInstanceToDelegateTo) throws javassist.NotFoundException - Throws:
javassist.NotFoundException
-
getParameterTypes
- Throws:
javassist.NotFoundException
-
getParametersAsString
-