Package org.powermock.core.classloader
Class MockClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- javassist.Loader
-
- org.powermock.core.classloader.DeferSupportingClassLoader
-
- org.powermock.core.classloader.MockClassLoader
-
public class MockClassLoader extends DeferSupportingClassLoader
Mock all classes except system classes. Notice that there are two different types of classes that are not mocked:- system classes are deferred to another classloader
- testing framework classes are loaded, but not modified
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
CGLIB_ENHANCER
private static java.lang.String
CGLIB_METHOD_WRAPPER
private javassist.ClassPool
classPool
private JavaAssistClassMarker
javaAssistClassMarker
private java.util.List<MockTransformer>
mockTransformerChain
private java.util.Set<java.lang.String>
modify
static java.lang.String
MODIFY_ALL_CLASSES
Pass this string to the constructor to indicate that all classes should be modified.private static java.lang.String[]
packagesToBeDeferred
private java.lang.String[]
packagesToLoadButNotModify
private java.lang.String[]
specificClassesToLoadButNotModify
-
Fields inherited from class org.powermock.core.classloader.DeferSupportingClassLoader
deferPackages, deferTo
-
-
Constructor Summary
Constructors Constructor Description MockClassLoader()
MockClassLoader(java.lang.String[] classesToMock)
Creates a new instance of theMockClassLoader
based on the following parameters:MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer)
Creates a new instance of theMockClassLoader
based on the following parameters:MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer, UseClassPathAdjuster useClassPathAdjuster)
Creates a new instance of theMockClassLoader
based on the following parameters:MockClassLoader(java.lang.String[] classesToMock, UseClassPathAdjuster useClassPathAdjuster)
Creates a new instance of theMockClassLoader
based on the following parameters:
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addClassesToModify(java.lang.String... classes)
Add classes that will be loaded by the mock classloader, i.e.private static java.lang.String[]
getPackagesToDefer(java.lang.String[] additionalDeferPackages)
private java.lang.Class<?>
loadMockClass(java.lang.String name)
Load a mocked version of the class.protected java.lang.Class<?>
loadModifiedClass(java.lang.String s)
private java.lang.Class<?>
loadUnmockedClass(java.lang.String name, java.security.ProtectionDomain protectionDomain)
void
setMockTransformerChain(java.util.List<MockTransformer> mockTransformerChain)
protected boolean
shouldLoadUnmodifiedClass(java.lang.String className)
private boolean
shouldLoadWithMockClassloaderWithoutModifications(java.lang.String className)
private boolean
shouldModify(java.lang.String className)
private boolean
shouldModifyAll()
protected boolean
shouldModifyClass(java.lang.String s)
-
Methods inherited from class org.powermock.core.classloader.DeferSupportingClassLoader
addIgnorePackage, cache, findResource, findResources, getResource, getResourceAsStream, getResources, loadClass, shouldDefer, shouldIgnore, shouldModify
-
Methods inherited from class javassist.Loader
addTranslator, delegateLoadingOf, delegateToParent, findClass, loadClassByDelegation, main, run, run, setClassPool, setDomain
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Field Detail
-
MODIFY_ALL_CLASSES
public static final java.lang.String MODIFY_ALL_CLASSES
Pass this string to the constructor to indicate that all classes should be modified.- See Also:
- Constant Field Values
-
CGLIB_ENHANCER
private static final java.lang.String CGLIB_ENHANCER
- See Also:
- Constant Field Values
-
CGLIB_METHOD_WRAPPER
private static final java.lang.String CGLIB_METHOD_WRAPPER
- See Also:
- Constant Field Values
-
javaAssistClassMarker
private final JavaAssistClassMarker javaAssistClassMarker
-
mockTransformerChain
private java.util.List<MockTransformer> mockTransformerChain
-
modify
private final java.util.Set<java.lang.String> modify
-
packagesToLoadButNotModify
private final java.lang.String[] packagesToLoadButNotModify
-
specificClassesToLoadButNotModify
private final java.lang.String[] specificClassesToLoadButNotModify
-
packagesToBeDeferred
private static final java.lang.String[] packagesToBeDeferred
-
classPool
private final javassist.ClassPool classPool
-
-
Constructor Detail
-
MockClassLoader
public MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer, UseClassPathAdjuster useClassPathAdjuster)
Creates a new instance of theMockClassLoader
based on the following parameters:- Parameters:
classesToMock
- The classes that must be modified to prepare for testability.packagesToDefer
- Classes in these packages will be defered to the system class-loader.
-
MockClassLoader
MockClassLoader()
-
MockClassLoader
public MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer)
Creates a new instance of theMockClassLoader
based on the following parameters:- Parameters:
classesToMock
- The classes that must be modified to prepare for testability.packagesToDefer
- Classes in these packages will be defered to the system class-loader.
-
MockClassLoader
public MockClassLoader(java.lang.String[] classesToMock, UseClassPathAdjuster useClassPathAdjuster)
Creates a new instance of theMockClassLoader
based on the following parameters:- Parameters:
classesToMock
- The classes that must be modified to prepare for testability.
-
MockClassLoader
public MockClassLoader(java.lang.String[] classesToMock)
Creates a new instance of theMockClassLoader
based on the following parameters:- Parameters:
classesToMock
- The classes that must be modified to prepare for testability.
-
-
Method Detail
-
getPackagesToDefer
private static java.lang.String[] getPackagesToDefer(java.lang.String[] additionalDeferPackages)
-
addClassesToModify
public final void addClassesToModify(java.lang.String... classes)
Add classes that will be loaded by the mock classloader, i.e. these classes will be byte-code manipulated to allow for testing. Any classes contained in thepackagesToBeDeferred
will be ignored. How ever classes added here have precedence over additionally deferred (ignored) packages (those ignored by the user using @PrepareForTest).- Parameters:
classes
- The fully qualified name of the classes that will be appended to the list of classes that will be byte-code modified to enable testability.
-
loadModifiedClass
protected java.lang.Class<?> loadModifiedClass(java.lang.String s) throws java.lang.ClassFormatError, java.lang.ClassNotFoundException
- Specified by:
loadModifiedClass
in classDeferSupportingClassLoader
- Throws:
java.lang.ClassFormatError
java.lang.ClassNotFoundException
-
shouldModify
private boolean shouldModify(java.lang.String className)
-
shouldModifyAll
private boolean shouldModifyAll()
-
loadUnmockedClass
private java.lang.Class<?> loadUnmockedClass(java.lang.String name, java.security.ProtectionDomain protectionDomain) throws java.lang.ClassFormatError, java.lang.ClassNotFoundException
- Throws:
java.lang.ClassFormatError
java.lang.ClassNotFoundException
-
loadMockClass
private java.lang.Class<?> loadMockClass(java.lang.String name)
Load a mocked version of the class.
-
setMockTransformerChain
public void setMockTransformerChain(java.util.List<MockTransformer> mockTransformerChain)
-
shouldModifyClass
protected boolean shouldModifyClass(java.lang.String s)
- Specified by:
shouldModifyClass
in classDeferSupportingClassLoader
-
shouldLoadUnmodifiedClass
protected boolean shouldLoadUnmodifiedClass(java.lang.String className)
- Specified by:
shouldLoadUnmodifiedClass
in classDeferSupportingClassLoader
-
shouldLoadWithMockClassloaderWithoutModifications
private boolean shouldLoadWithMockClassloaderWithoutModifications(java.lang.String className)
-
-