• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2017 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 package org.mockitointegration;
6 
7 import static org.mockitoutil.ClassLoaders.coverageTool;
8 
9 import java.util.Set;
10 
11 import net.bytebuddy.ByteBuddy;
12 import net.bytebuddy.agent.ByteBuddyAgent;
13 import org.hamcrest.Matcher;
14 import org.junit.Assume;
15 import org.junit.Test;
16 import org.mockito.Mockito;
17 import org.mockito.internal.configuration.plugins.Plugins;
18 import org.mockitoutil.ClassLoaders;
19 import org.objenesis.Objenesis;
20 
21 public class NoJUnitDependenciesTest {
22 
23     @Test
pure_mockito_should_not_depend_JUnit___ByteBuddy()24     public void pure_mockito_should_not_depend_JUnit___ByteBuddy() throws Exception {
25         Assume.assumeTrue(
26                 "ByteBuddyMockMaker".equals(Plugins.getMockMaker().getClass().getSimpleName()));
27 
28         ClassLoader classLoader_without_JUnit =
29                 ClassLoaders.excludingClassLoader()
30                         .withCodeSourceUrlOf(
31                                 Mockito.class,
32                                 Matcher.class,
33                                 ByteBuddy.class,
34                                 ByteBuddyAgent.class,
35                                 Objenesis.class)
36                         .withCodeSourceUrlOf(coverageTool())
37                         .without("junit", "org.junit", "org.opentest4j")
38                         .build();
39 
40         Set<String> pureMockitoAPIClasses =
41                 ClassLoaders.in(classLoader_without_JUnit)
42                         .omit("runners", "junit", "JUnit", "opentest4j")
43                         .listOwnedClasses();
44 
45         // The later class is required to be initialized before any inline mock maker classes can be
46         // loaded.
47         checkDependency(
48                 classLoader_without_JUnit,
49                 "org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker");
50         pureMockitoAPIClasses.remove(
51                 "org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker");
52 
53         for (String pureMockitoAPIClass : pureMockitoAPIClasses) {
54             checkDependency(classLoader_without_JUnit, pureMockitoAPIClass);
55         }
56     }
57 
checkDependency(ClassLoader classLoader_without_JUnit, String pureMockitoAPIClass)58     private void checkDependency(ClassLoader classLoader_without_JUnit, String pureMockitoAPIClass)
59             throws ClassNotFoundException {
60         try {
61             Class.forName(pureMockitoAPIClass, true, classLoader_without_JUnit);
62         } catch (Throwable e) {
63             e.printStackTrace();
64             throw new AssertionError(
65                     String.format("'%s' has some dependency to JUnit", pureMockitoAPIClass));
66         }
67     }
68 }
69