Attempt to subclass IMethods and add benchmark script
diff --git a/benchmark.sh b/benchmark.sh
new file mode 100755
index 0000000..c189192
--- /dev/null
+++ b/benchmark.sh
@@ -0,0 +1,4 @@
+# Remove lock file to prevent caching problems when rerunning the benchmark
+rm .gradle/2.14.1/taskArtifacts/cache.properties.lock
+# Run the actual benchmark
+./gradlew jmh
diff --git a/src/jmh/java/mockitointegration/IMethodsClassLoader.java b/src/jmh/java/mockitointegration/IMethodsClassLoader.java
index 051d4e7..67aa45d 100644
--- a/src/jmh/java/mockitointegration/IMethodsClassLoader.java
+++ b/src/jmh/java/mockitointegration/IMethodsClassLoader.java
@@ -1,5 +1,7 @@
package mockitointegration;
+import net.bytebuddy.ByteBuddy;
+import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.mockitousage.IMethods;
import java.io.ByteArrayOutputStream;
@@ -8,8 +10,19 @@
class IMethodsClassLoader extends ClassLoader {
+ private ByteBuddy byteBuddy;
+
IMethodsClassLoader() {
super(null);
+ byteBuddy = new ByteBuddy();
+ }
+
+ Class<? extends IMethods> loadIMethods() {
+ return byteBuddy
+ .subclass(IMethods.class)
+ .make()
+ .load(this, ClassLoadingStrategy.Default.WRAPPER)
+ .getLoaded();
}
@Override
diff --git a/src/jmh/java/mockitointegration/MockitoMockBenchmark.java b/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
index f131176..918667c 100644
--- a/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
+++ b/src/jmh/java/mockitointegration/MockitoMockBenchmark.java
@@ -8,7 +8,7 @@
private Class<?> clazz;
- private ClassLoader loader;
+ private IMethodsClassLoader loader;
public MockitoMockBenchmark() {
loader = new IMethodsClassLoader();
@@ -17,7 +17,7 @@
@Setup(Level.Invocation)
public void setup() throws ClassNotFoundException {
- clazz = loader.loadClass("org.mockitousage.IMethods");
+ clazz = loader.loadIMethods();
}
@TearDown
diff --git a/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java b/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
index 2381e27..545da9d 100644
--- a/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
+++ b/src/jmh/java/mockitointegration/MockitoMockInvocationBenchmark.java
@@ -9,7 +9,7 @@
private IMethods mock;
- private ClassLoader loader;
+ private IMethodsClassLoader loader;
public MockitoMockInvocationBenchmark() {
loader = new IMethodsClassLoader();
@@ -18,7 +18,7 @@
@Setup(Level.Invocation)
public void setup() throws ClassNotFoundException {
- mock = (IMethods) Mockito.mock(loader.loadClass("org.mockitousage.IMethods"));
+ mock = Mockito.mock(loader.loadIMethods());
}
@TearDown