Class 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:

    1. system classes are deferred to another classloader
    2. testing framework classes are loaded, but not modified
    • 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_METHOD_WRAPPER

        private static final java.lang.String CGLIB_METHOD_WRAPPER
        See Also:
        Constant Field Values
      • 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 the MockClassLoader 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 the MockClassLoader 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 the MockClassLoader 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 the MockClassLoader 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 the packagesToBeDeferred 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 class DeferSupportingClassLoader
        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)
      • shouldLoadWithMockClassloaderWithoutModifications

        private boolean shouldLoadWithMockClassloaderWithoutModifications​(java.lang.String className)