Replace `createMock(JavaLibraryRule.class)` with `new FakeJavaLibraryRule()`.

Summary: As promised, I am trying to address my abuse of mocks by replacing them with fakes.

Test Plan: Sandcastle builds.
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