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
MockTransformerto modify classes during loading.- See Also:
MockClassLoaderConfiguration,ClassLoader.getSystemClassLoader(),IgnorePackagesExtractor
-
-
Field Summary
Fields Modifier and Type Field Description protected ClassMarkerclassMarkerprotected ClassWrapperFactoryclassWrapperFactoryprivate MockTransformerChainmockTransformerChainstatic java.lang.StringMODIFY_ALL_CLASSESPass 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 protectedMockClassLoader(java.lang.String[] classesToMock, java.lang.String[] packagesToDefer)Creates a new instance of the based on the following parameters:protectedMockClassLoader(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)MockTransformerChaingetMockTransformerChain()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)voidsetMockTransformerChain(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 ofClassWrapperFactorywhich 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:
loadClassByThisClassLoaderin classDeferSupportingClassLoader- Throws:
java.lang.ClassFormatErrorjava.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
-
-