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