Fill in unimplemented caching tests.
diff --git a/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java b/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
index ce2f9e4..70b7249 100644
--- a/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
+++ b/src/test/java/com/google/dexmaker/stock/ProxyBuilderTest.java
@@ -17,6 +17,7 @@
 package com.google.dexmaker.stock;
 
 import com.google.dexmaker.DexMakerTest;
+import dalvik.system.PathClassLoader;
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
@@ -507,17 +508,62 @@
     }
 
     public void testCaching() throws Exception {
-        SimpleClass proxy1 = proxyFor(SimpleClass.class).build();
-        SimpleClass proxy2 = proxyFor(SimpleClass.class).build();
-        assertSame(proxy1.getClass(), proxy2.getClass());
+        SimpleClass a = proxyFor(SimpleClass.class).build();
+        SimpleClass b = proxyFor(SimpleClass.class).build();
+        assertSame(a.getClass(), b.getClass());
     }
 
     public void testCachingWithMultipleConstructors() throws Exception {
-        fail("TODO");
+        HasMultipleConstructors a = ProxyBuilder.forClass(HasMultipleConstructors.class)
+                .constructorArgTypes()
+                .constructorArgValues()
+                .handler(fakeHandler)
+                .dexCache(DexMakerTest.getDataDirectory()).build();
+        assertEquals("no args", a.calledConstructor);
+        HasMultipleConstructors b = ProxyBuilder.forClass(HasMultipleConstructors.class)
+                .constructorArgTypes(int.class)
+                .constructorArgValues(2)
+                .handler(fakeHandler)
+                .dexCache(DexMakerTest.getDataDirectory()).build();
+        assertEquals("int 2", b.calledConstructor);
+        assertEquals(a.getClass(), b.getClass());
+
+        HasMultipleConstructors c = ProxyBuilder.forClass(HasMultipleConstructors.class)
+                .constructorArgTypes(Integer.class)
+                .constructorArgValues(3)
+                .handler(fakeHandler)
+                .dexCache(DexMakerTest.getDataDirectory()).build();
+        assertEquals("Integer 3", c.calledConstructor);
+        assertEquals(a.getClass(), c.getClass());
     }
 
-    public void testCachingWithDifferentParentClassLoaders() throws Exception {
-        fail("TODO");
+    public static class HasMultipleConstructors {
+        private final String calledConstructor;
+        public HasMultipleConstructors() {
+            calledConstructor = "no args";
+        }
+        public HasMultipleConstructors(int b) {
+            calledConstructor = "int " + b;
+        }
+        public HasMultipleConstructors(Integer c) {
+            calledConstructor = "Integer " + c;
+        }
+    }
+
+    public void testClassNotCachedWithDifferentParentClassLoaders() throws Exception {
+        ClassLoader classLoaderA = new PathClassLoader("", getClass().getClassLoader());
+        SimpleClass a = proxyFor(SimpleClass.class)
+                .parentClassLoader(classLoaderA)
+                .build();
+        assertEquals(classLoaderA, a.getClass().getClassLoader().getParent());
+
+        ClassLoader classLoaderB = new PathClassLoader("", getClass().getClassLoader());
+        SimpleClass b = proxyFor(SimpleClass.class)
+                .parentClassLoader(classLoaderB)
+                .build();
+        assertEquals(classLoaderB, b.getClass().getClassLoader().getParent());
+
+        assertTrue(a.getClass() != b.getClass());
     }
 
     public void testSubclassOfRandom() throws Exception {