Home | History | Annotate | Download | only in mockitointegration
      1 package org.mockitointegration;
      2 
      3 import net.bytebuddy.ByteBuddy;
      4 import net.bytebuddy.agent.ByteBuddyAgent;
      5 import org.hamcrest.Matcher;
      6 import org.junit.Assume;
      7 import org.junit.Test;
      8 import org.mockito.Mockito;
      9 import org.mockito.internal.configuration.plugins.Plugins;
     10 import org.mockitoutil.ClassLoaders;
     11 import org.objenesis.Objenesis;
     12 
     13 import java.util.Arrays;
     14 import java.util.Set;
     15 
     16 import static org.mockitoutil.ClassLoaders.coverageTool;
     17 
     18 public class NoJUnitDependenciesTest {
     19 
     20     @Test
     21     public void pure_mockito_should_not_depend_JUnit___ByteBuddy() throws Exception {
     22         Assume.assumeTrue("ByteBuddyMockMaker".equals(Plugins.getMockMaker().getClass().getSimpleName()));
     23 
     24         ClassLoader classLoader_without_JUnit = ClassLoaders.excludingClassLoader()
     25                 .withCodeSourceUrlOf(
     26                         Mockito.class,
     27                         Matcher.class,
     28                         ByteBuddy.class,
     29                         ByteBuddyAgent.class,
     30                         Objenesis.class
     31                 )
     32                 .withCodeSourceUrlOf(coverageTool())
     33                 .without("junit", "org.junit")
     34                 .build();
     35 
     36         Set<String> pureMockitoAPIClasses = ClassLoaders.in(classLoader_without_JUnit).omit("runners", "junit", "JUnit").listOwnedClasses();
     37 
     38         // The later class is required to be initialized before any inline mock maker classes can be loaded.
     39         checkDependency(classLoader_without_JUnit, "org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker");
     40         pureMockitoAPIClasses.remove("org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker");
     41 
     42         for (String pureMockitoAPIClass : pureMockitoAPIClasses) {
     43             checkDependency(classLoader_without_JUnit, pureMockitoAPIClass);
     44         }
     45     }
     46 
     47     private void checkDependency(ClassLoader classLoader_without_JUnit, String pureMockitoAPIClass) throws ClassNotFoundException {
     48         try {
     49             Class.forName(pureMockitoAPIClass, true, classLoader_without_JUnit);
     50         } catch (Throwable e) {
     51             e.printStackTrace();
     52             throw new AssertionError(String.format("'%s' has some dependency to JUnit", pureMockitoAPIClass));
     53         }
     54     }
     55 }
     56