diff --git a/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java b/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java
index 84e62f6..1d2a348 100644
--- a/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java
+++ b/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java
@@ -22,7 +22,7 @@
 import static org.junit.Assert.assertTrue;
 
 import com.facebook.buck.java.AccumulateClassNames;
-import com.facebook.buck.java.JavaLibraryRule;
+import com.facebook.buck.java.FakeJavaLibraryRule;
 import com.facebook.buck.java.abi.AbiWriterProtocol;
 import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.rules.AbiRule;
@@ -53,8 +53,8 @@
 
   @Test
   public void testGetBuildStepsWhenThereAreClassesToDex() throws IOException {
-    JavaLibraryRule javaLibraryRule = createMock(JavaLibraryRule.class);
-    expect(javaLibraryRule.getPathToOutputFile()).andReturn("buck-out/gen/foo/bar.jar");
+    FakeJavaLibraryRule javaLibraryRule = new FakeJavaLibraryRule(new BuildTarget("//foo", "bar"));
+    javaLibraryRule.setOutputFile("buck-out/gen/foo/bar.jar");
 
     AccumulateClassNames accumulateClassNames = createMock(AccumulateClassNames.class);
     expect(accumulateClassNames.getClassNames()).andReturn(
@@ -66,7 +66,7 @@
 
     replayAll();
 
-    BuildTarget buildTarget = new BuildTarget("//foo", "bar");
+    BuildTarget buildTarget = new BuildTarget("//foo", "bar", "dex");
     DexProducedFromJavaLibraryThatContainsClassFiles preDex =
         new DexProducedFromJavaLibraryThatContainsClassFiles(buildTarget, accumulateClassNames);
     List<Step> steps = preDex.getBuildSteps(context, buildableContext);
@@ -80,8 +80,8 @@
     ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
     expect(projectFilesystem.resolve(Paths.get("buck-out/gen/foo")))
         .andReturn(Paths.get("/home/user/buck-out/gen/foo"));
-    expect(projectFilesystem.resolve(Paths.get("buck-out/gen/foo/bar.dex.jar")))
-        .andReturn(Paths.get("/home/user/buck-out/gen/foo/bar.dex.jar"));
+    expect(projectFilesystem.resolve(Paths.get("buck-out/gen/foo/bar#dex.dex.jar")))
+        .andReturn(Paths.get("/home/user/buck-out/gen/foo/bar#dex.dex.jar"));
     expect(projectFilesystem.resolve(Paths.get("buck-out/gen/foo/bar.jar")))
         .andReturn(Paths.get("/home/user/buck-out/gen/foo/bar.jar"));
     replayAll();
@@ -93,11 +93,11 @@
         .build();
 
     String expectedDxCommand = "/usr/bin/dx" +
-        " --dex --no-optimize --force-jumbo --output buck-out/gen/foo/bar.dex.jar " +
+        " --dex --no-optimize --force-jumbo --output buck-out/gen/foo/bar#dex.dex.jar " +
         "/home/user/buck-out/gen/foo/bar.jar";
     MoreAsserts.assertSteps("Generate bar.dex.jar.",
         ImmutableList.of(
-          "rm -f /home/user/buck-out/gen/foo/bar.dex.jar",
+          "rm -f /home/user/buck-out/gen/foo/bar#dex.dex.jar",
           "mkdir -p /home/user/buck-out/gen/foo",
           expectedDxCommand,
           "record_dx_success"),
@@ -115,7 +115,7 @@
     int exitCode = recordArtifactAndMetadataStep.execute(executionContext);
     assertEquals(0, exitCode);
     assertTrue("The generated .dex.jar file should be in the set of recorded artifacts.",
-        buildableContext.getRecordedArtifacts().contains(Paths.get("bar.dex.jar")));
+        buildableContext.getRecordedArtifacts().contains(Paths.get("bar#dex.dex.jar")));
     buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA,
         abiKey.getHash());
     buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_ON_DISK_METADATA,
diff --git a/test/com/facebook/buck/cli/BUCK b/test/com/facebook/buck/cli/BUCK
index 624c0f6..9995d00 100644
--- a/test/com/facebook/buck/cli/BUCK
+++ b/test/com/facebook/buck/cli/BUCK
@@ -95,6 +95,7 @@
     '//src/com/facebook/buck/util/environment:environment',
     '//src/com/facebook/buck/timing:timing',
     '//test/com/facebook/buck/event:testutil',
+    '//test/com/facebook/buck/java:fakes',
     '//test/com/facebook/buck/model:BuildTargetFactory',
     '//test/com/facebook/buck/parser:PartialGraphFactory',
     '//test/com/facebook/buck/rules:testutil',
diff --git a/test/com/facebook/buck/cli/TestCommandTest.java b/test/com/facebook/buck/cli/TestCommandTest.java
index e50a7ae..219d1ed 100644
--- a/test/com/facebook/buck/cli/TestCommandTest.java
+++ b/test/com/facebook/buck/cli/TestCommandTest.java
@@ -30,8 +30,10 @@
 
 import com.facebook.buck.graph.MutableDirectedGraph;
 import com.facebook.buck.java.DefaultJavaPackageFinder;
+import com.facebook.buck.java.FakeJavaLibraryRule;
 import com.facebook.buck.java.JavaLibraryRule;
 import com.facebook.buck.java.JavaTestRule;
+import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.model.BuildTargetFactory;
 import com.facebook.buck.model.BuildTargetPattern;
 import com.facebook.buck.rules.BuildRule;
@@ -95,17 +97,15 @@
     assertTrue(JavaTestRule.isGeneratedFile(pathToGenFile));
 
     ImmutableSortedSet<String> javaSrcs = ImmutableSortedSet.of(pathToGenFile);
-
-    JavaLibraryRule javaLibraryRule = createMock(JavaLibraryRule.class);
-    expect(javaLibraryRule.getJavaSrcs())
-        .andReturn(ImmutableSortedSet.copyOf(javaSrcs));
+    JavaLibraryRule javaLibraryRule = new FakeJavaLibraryRule(new BuildTarget("//foo", "bar"))
+        .setJavaSrcs(javaSrcs);
 
     DefaultJavaPackageFinder defaultJavaPackageFinder =
         createMock(DefaultJavaPackageFinder.class);
 
     ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
 
-    Object[] mocks = new Object[] {projectFilesystem, defaultJavaPackageFinder, javaLibraryRule};
+    Object[] mocks = new Object[] {projectFilesystem, defaultJavaPackageFinder};
     replay(mocks);
 
     ImmutableSet<String> result = TestCommand.getPathToSourceFolders(
@@ -127,6 +127,8 @@
     assertFalse(JavaTestRule.isGeneratedFile(pathToNonGenFile));
 
     ImmutableSortedSet<String> javaSrcs = ImmutableSortedSet.of(pathToNonGenFile);
+    JavaLibraryRule javaLibraryRule = new FakeJavaLibraryRule(new BuildTarget("//foo", "bar"))
+        .setJavaSrcs(javaSrcs);
 
     File parentFile = createMock(File.class);
     expect(parentFile.getName()).andReturn("src");
@@ -144,16 +146,11 @@
     expect(projectFilesystem.getFileForRelativePath(pathToNonGenFile))
         .andReturn(sourceFile);
 
-    JavaLibraryRule javaLibraryRule = createMock(JavaLibraryRule.class);
-    expect(javaLibraryRule.getJavaSrcs())
-        .andReturn(ImmutableSortedSet.copyOf(javaSrcs));
-
     Object[] mocks = new Object[] {
         parentFile,
         sourceFile,
         defaultJavaPackageFinder,
-        projectFilesystem,
-        javaLibraryRule};
+        projectFilesystem};
     replay(mocks);
 
     ImmutableSet<String> result = TestCommand.getPathToSourceFolders(
@@ -175,6 +172,8 @@
     assertFalse(JavaTestRule.isGeneratedFile(pathToNonGenFile));
 
     ImmutableSortedSet<String> javaSrcs = ImmutableSortedSet.of(pathToNonGenFile);
+    JavaLibraryRule javaLibraryRule = new FakeJavaLibraryRule(new BuildTarget("//foo", "bar"))
+        .setJavaSrcs(javaSrcs);
 
     DefaultJavaPackageFinder defaultJavaPackageFinder =
         createMock(DefaultJavaPackageFinder.class);
@@ -182,11 +181,7 @@
 
     ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
 
-    JavaLibraryRule javaLibraryRule = createMock(JavaLibraryRule.class);
-    expect(javaLibraryRule.getJavaSrcs())
-        .andReturn(ImmutableSortedSet.copyOf(javaSrcs));
-
-    Object[] mocks = new Object[] {defaultJavaPackageFinder, projectFilesystem, javaLibraryRule};
+    Object[] mocks = new Object[] {defaultJavaPackageFinder, projectFilesystem};
     replay(mocks);
 
     ImmutableSet<String> result = TestCommand.getPathToSourceFolders(
@@ -237,9 +232,8 @@
     expect(projectFilesystem.getFileForRelativePath(pathToNonGenFile2))
         .andReturn(sourceFile2);
 
-    JavaLibraryRule javaLibraryRule = createMock(JavaLibraryRule.class);
-    expect(javaLibraryRule.getJavaSrcs())
-        .andReturn(ImmutableSortedSet.copyOf(javaSrcs));
+    JavaLibraryRule javaLibraryRule = new FakeJavaLibraryRule(new BuildTarget("//foo", "bar"))
+        .setJavaSrcs(javaSrcs);
 
     Object[] mocks = new Object[] {
         parentFile1,
@@ -247,8 +241,7 @@
         parentFile2,
         sourceFile2,
         defaultJavaPackageFinder,
-        projectFilesystem,
-        javaLibraryRule};
+        projectFilesystem};
     replay(mocks);
 
     ImmutableSet<String> result = TestCommand.getPathToSourceFolders(
diff --git a/test/com/facebook/buck/java/AccumulateClassNamesTest.java b/test/com/facebook/buck/java/AccumulateClassNamesTest.java
index 1a20f62..8354b73 100644
--- a/test/com/facebook/buck/java/AccumulateClassNamesTest.java
+++ b/test/com/facebook/buck/java/AccumulateClassNamesTest.java
@@ -134,12 +134,9 @@
   @Test
   public void testInitializeFromDisk() throws IOException {
     BuildTarget buildTarget = new BuildTarget("//foo", "bar");
-    JavaLibraryRule javaRule = createMock(JavaLibraryRule.class);
+    JavaLibraryRule javaRule = new FakeJavaLibraryRule(buildTarget);
 
-    replayAll();
     AccumulateClassNames accumulateClassNames = new AccumulateClassNames(buildTarget, javaRule);
-    verifyAll();
-    resetAll();
 
     OnDiskBuildInfo onDiskBuildInfo = createMock(OnDiskBuildInfo.class);
     List<String> lines = ImmutableList.of(
diff --git a/test/com/facebook/buck/java/FakeJavaLibraryRule.java b/test/com/facebook/buck/java/FakeJavaLibraryRule.java
index 4a337a0..ef57e17 100644
--- a/test/com/facebook/buck/java/FakeJavaLibraryRule.java
+++ b/test/com/facebook/buck/java/FakeJavaLibraryRule.java
@@ -26,6 +26,7 @@
 import com.facebook.buck.rules.BuildableProperties;
 import com.facebook.buck.rules.FakeBuildRule;
 import com.facebook.buck.rules.Sha1HashCode;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.ImmutableSortedSet;
@@ -34,6 +35,8 @@
 
   private final static BuildableProperties OUTPUT_TYPE = new BuildableProperties(LIBRARY);
 
+  private ImmutableSortedSet<String> srcs = ImmutableSortedSet.of();
+
   public FakeJavaLibraryRule(
       BuildRuleType type,
       BuildTarget target,
@@ -42,6 +45,10 @@
     super(type, target, deps, visibilityPatterns);
   }
 
+  public FakeJavaLibraryRule(BuildTarget target) {
+    super(BuildRuleType.JAVA_LIBRARY, target);
+  }
+
   @Override
   public BuildableProperties getProperties() {
     return OUTPUT_TYPE;
@@ -64,7 +71,12 @@
 
   @Override
   public ImmutableSortedSet<String> getJavaSrcs() {
-    return ImmutableSortedSet.of();
+    return srcs;
+  }
+
+  public FakeJavaLibraryRule setJavaSrcs(ImmutableSortedSet<String> srcs) {
+    this.srcs = Preconditions.checkNotNull(srcs);
+    return this;
   }
 
   @Override
