• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
pure_mockito_should_not_depend_JUnit___ByteBuddy()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 
checkDependency(ClassLoader classLoader_without_JUnit, String pureMockitoAPIClass)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