public abstract class TestClassTransformer extends java.lang.Object implements MockTransformer
AbstractMainMockTransformer.setAllConstructorsToPublic(javassist.CtClass)
)
- to avoid that multiple public test-class constructors cause
a delegate runner from JUnit (or 3rd party) to bail out with an
error message such as "Test class can only have one constructor".
4) Set test-class defer constructor (if exist) as protected instead of public.
Otherwise a delegate runner from JUnit (or 3rd party) might get confused by
the presence of more than one test-class constructor and bail out with an
error message such as "Test class can only have one constructor".
The #3 and #4 enhancements will also be enforced on the constructors
of classes that are nested within the test-class.Modifier and Type | Class and Description |
---|---|
static interface |
TestClassTransformer.ForTestClass |
Modifier and Type | Field and Description |
---|---|
private java.lang.Class<?> |
testClass |
private java.lang.Class<? extends java.lang.annotation.Annotation> |
testMethodAnnotationType |
Modifier | Constructor and Description |
---|---|
private |
TestClassTransformer(java.lang.Class<?> testClass,
java.lang.Class<? extends java.lang.annotation.Annotation> testMethodAnnotationType) |
Modifier and Type | Method and Description |
---|---|
private void |
addClassInitializerNotification(javassist.CtClass clazz) |
private void |
addConstructorNotification(javassist.CtClass clazz) |
private void |
addLifeCycleNotifications(javassist.CtClass clazz) |
private java.lang.Class<?> |
asOriginalClass(javassist.CtClass type) |
private java.lang.Class<?>[] |
asOriginalClassParams(javassist.CtClass[] parameterTypes) |
private static java.lang.String |
createSignature(java.lang.String testClass,
java.lang.String returnType,
java.lang.String methodName,
java.lang.String[] paramTypes) |
static TestClassTransformer.ForTestClass |
forTestClass(java.lang.Class<?> testClass) |
private static boolean |
hasSuperClass(javassist.CtClass clazz) |
private boolean |
isNestedWithinTestClass(javassist.CtClass clazz) |
private boolean |
isTestClass(javassist.CtClass clazz) |
private void |
makeDeferConstructorNonPublic(javassist.CtClass clazz) |
(package private) abstract boolean |
mustHaveTestAnnotationRemoved(javassist.CtMethod method) |
private void |
removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(javassist.CtClass clazz) |
private void |
removeTestMethodAnnotationFrom(javassist.CtMethod m) |
private void |
restoreOriginalConstructorsAccesses(javassist.CtClass clazz) |
private static java.lang.String |
signatureOf(javassist.CtMethod m) |
private static java.lang.String |
signatureOf(java.lang.reflect.Method m) |
javassist.CtClass |
transform(javassist.CtClass clazz)
Transforms the
clazz . |
private final java.lang.Class<?> testClass
private final java.lang.Class<? extends java.lang.annotation.Annotation> testMethodAnnotationType
private TestClassTransformer(java.lang.Class<?> testClass, java.lang.Class<? extends java.lang.annotation.Annotation> testMethodAnnotationType)
public static TestClassTransformer.ForTestClass forTestClass(java.lang.Class<?> testClass)
private boolean isTestClass(javassist.CtClass clazz)
private boolean isNestedWithinTestClass(javassist.CtClass clazz)
private java.lang.Class<?> asOriginalClass(javassist.CtClass type) throws java.lang.Exception
java.lang.Exception
private java.lang.Class<?>[] asOriginalClassParams(javassist.CtClass[] parameterTypes) throws java.lang.Exception
java.lang.Exception
abstract boolean mustHaveTestAnnotationRemoved(javassist.CtMethod method) throws java.lang.Exception
java.lang.Exception
private void removeTestMethodAnnotationFrom(javassist.CtMethod m) throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
private void removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(javassist.CtClass clazz) throws java.lang.Exception
java.lang.Exception
public javassist.CtClass transform(javassist.CtClass clazz) throws java.lang.Exception
MockTransformer
clazz
.transform
in interface MockTransformer
clazz
- The class to be
transform into a mock enabled class.CtClass
representation of the mocked class.java.lang.Exception
private void addLifeCycleNotifications(javassist.CtClass clazz)
private void addClassInitializerNotification(javassist.CtClass clazz) throws javassist.CannotCompileException
javassist.CannotCompileException
private static boolean hasSuperClass(javassist.CtClass clazz)
private void addConstructorNotification(javassist.CtClass clazz) throws javassist.CannotCompileException
javassist.CannotCompileException
private void restoreOriginalConstructorsAccesses(javassist.CtClass clazz) throws java.lang.Exception
java.lang.Exception
private void makeDeferConstructorNonPublic(javassist.CtClass clazz)
private static java.lang.String signatureOf(java.lang.reflect.Method m)
private static java.lang.String signatureOf(javassist.CtMethod m) throws javassist.NotFoundException
javassist.NotFoundException
private static java.lang.String createSignature(java.lang.String testClass, java.lang.String returnType, java.lang.String methodName, java.lang.String[] paramTypes)