Package org.powermock.core.classloader
Class MockClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- org.powermock.core.classloader.DeferSupportingClassLoader
-
- org.powermock.core.classloader.MockClassLoader
-
- Direct Known Subclasses:
JavassistMockClassLoader
public abstract class MockClassLoader extends DeferSupportingClassLoader
The classloader loads and modified all classes except:
- system classes. They are deferred to system classloader
- classes that locate in packages that specified as packages to ignore with using
MockClassLoaderConfiguration.addIgnorePackage(String...)
Testing frameworks classes are loaded, but not modified.
The classloader uses list of
MockTransformer
to modify classes during loading.- See Also:
MockClassLoaderConfiguration
,ClassLoader.getSystemClassLoader()
,IgnorePackagesExtractor
-
-
Field Summary
Fields Modifier and Type Field Description protected ClassMarker
classMarker
protected ClassWrapperFactory
classWrapperFactory
private MockTransformerChain
mockTransformerChain
static java.lang.String
MODIFY_ALL_CLASSES
Pass this string to the constructor to indicate that all classes should be modified.-
Fields inherited from class org.powermock.core.classloader.DeferSupportingClassLoader
deferTo
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer)
Creates a new instance of the based on the following parameters:protected
MockClassLoader(MockClassLoaderConfiguration configuration, ClassWrapperFactory classWrapperFactory)
Creates a new instance of the based on the following parameters:
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract byte[]
defineAndTransformClass(java.lang.String name, java.security.ProtectionDomain protectionDomain)
private java.lang.Class<?>
defineClass(java.lang.String name, java.net.URL url, java.security.ProtectionDomain protectionDomain)
java.lang.Class<?>
defineClass(java.lang.String name, java.security.ProtectionDomain protectionDomain, byte[] clazz)
MockTransformerChain
getMockTransformerChain()
protected java.lang.Class<?>
loadClassByThisClassLoader(java.lang.String className)
private java.lang.Class<?>
loadMockClass(java.lang.String name, java.security.ProtectionDomain protectionDomain)
protected java.lang.Class<?>
loadUnmockedClass(java.lang.String name, java.security.ProtectionDomain protectionDomain)
private byte[]
readClass(java.net.URL url)
void
setMockTransformerChain(MockTransformerChain mockTransformerChain)
protected <T> ClassWrapper<T>
transformClass(ClassWrapper<T> wrappedType)
-
Methods inherited from class org.powermock.core.classloader.DeferSupportingClassLoader
cache, findResource, findResources, getClassLoadingLock, getConfiguration, getResource, getResourceAsStream, getResources, loadClass
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, 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
-
classMarker
protected ClassMarker classMarker
-
classWrapperFactory
protected ClassWrapperFactory classWrapperFactory
-
mockTransformerChain
private MockTransformerChain mockTransformerChain
-
-
Constructor Detail
-
MockClassLoader
protected MockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer)
Creates a new instance of the 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
protected MockClassLoader(MockClassLoaderConfiguration configuration, ClassWrapperFactory classWrapperFactory)
Creates a new instance of the based on the following parameters:- Parameters:
configuration
- The configuration of class loader. Configuration contains information about classes which should be loaded by class loader, defer to system and mocked.classWrapperFactory
- an instance ofClassWrapperFactory
which is used to wrap internal framework's representation of the class intoClassWrapper
- See Also:
MockClassLoaderConfiguration
-
-
Method Detail
-
loadClassByThisClassLoader
protected java.lang.Class<?> loadClassByThisClassLoader(java.lang.String className) throws java.lang.ClassFormatError, java.lang.ClassNotFoundException
- Specified by:
loadClassByThisClassLoader
in classDeferSupportingClassLoader
- Throws:
java.lang.ClassFormatError
java.lang.ClassNotFoundException
-
setMockTransformerChain
public void setMockTransformerChain(MockTransformerChain mockTransformerChain)
-
getMockTransformerChain
public MockTransformerChain getMockTransformerChain()
-
loadUnmockedClass
protected java.lang.Class<?> loadUnmockedClass(java.lang.String name, java.security.ProtectionDomain protectionDomain) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
defineClass
private java.lang.Class<?> defineClass(java.lang.String name, java.net.URL url, java.security.ProtectionDomain protectionDomain) throws java.io.IOException
- Throws:
java.io.IOException
-
readClass
private byte[] readClass(java.net.URL url) throws java.io.IOException
- Throws:
java.io.IOException
-
loadMockClass
private java.lang.Class<?> loadMockClass(java.lang.String name, java.security.ProtectionDomain protectionDomain) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
defineClass
public java.lang.Class<?> defineClass(java.lang.String name, java.security.ProtectionDomain protectionDomain, byte[] clazz)
-
transformClass
protected <T> ClassWrapper<T> transformClass(ClassWrapper<T> wrappedType) throws java.lang.Exception
- Throws:
java.lang.Exception
-
defineAndTransformClass
protected abstract byte[] defineAndTransformClass(java.lang.String name, java.security.ProtectionDomain protectionDomain) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
-