diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
index c02da47..e9da3a7 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
@@ -69,7 +69,7 @@
         c1.name(), c2.name());
     String actual = res.getActualBodyString();
     assertTrue(String.format("Expected diff body to contain [%s]:\n%s", diffHeader, actual),
-        actual.indexOf(diffHeader) >= 0);
+        actual.contains(diffHeader));
   }
 
   @Test
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
index ee886a1..5890e78 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
@@ -21,7 +21,6 @@
 
 import com.google.common.base.Function;
 import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -174,7 +173,7 @@
   public void setQueryString(String qs) {
     ListMultimap<String, String> params = LinkedListMultimap.create();
     for (String entry : Splitter.on('&').split(qs)) {
-      List<String> kv = ImmutableList.copyOf(Splitter.on('=').limit(2).split(entry));
+      List<String> kv = Splitter.on('=').limit(2).splitToList(entry);
       try {
         params.put(URLDecoder.decode(kv.get(0), UTF_8.name()),
             kv.size() == 2 ? URLDecoder.decode(kv.get(1), UTF_8.name()) : "");
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
index 941f332..8c596d8 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
@@ -169,7 +169,7 @@
 
   @Override
   public boolean containsHeader(String name) {
-    return !headers.get(name).isEmpty();
+    return headers.containsKey(name);
   }
 
   @Override
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
index 8474ae2..9271133 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -123,14 +123,14 @@
     // Matches exactly.
     assertEquals(new Result(Revision.peeled(commit.name(), commit)), parser.parse(commit.name()));
     // refs/changes/* is excluded from ancestry search.
-    assertEquals(null, parser.parse(parent.name()));
+    assertNull(parser.parse(parent.name()));
   }
 
   @Test
   public void parseNonVisibleCommitSha() throws Exception {
     RevCommit other = repo.commit().create();
     repo.branch("master").commit().create();
-    assertEquals(null, parser.parse(other.name()));
+    assertNull(parser.parse(other.name()));
 
     repo.branch("other").update(other);
     assertEquals(new Result(Revision.peeled(other.name(), other)), parser.parse(other.name()));
@@ -232,8 +232,8 @@
   public void nonVisibleDiffShas() throws Exception {
     RevCommit other = repo.commit().create();
     RevCommit master = repo.branch("master").commit().create();
-    assertEquals(null, parser.parse("other..master"));
-    assertEquals(null, parser.parse("master..other"));
+    assertNull(parser.parse("other..master"));
+    assertNull(parser.parse("master..other"));
 
     repo.branch("other").update(other);
     assertEquals(
@@ -277,17 +277,17 @@
     RevCommit master = repo.branch("master").commit().add("blob", blob).create();
 
     assertEquals(master, repo.getRepository().resolve("master^{}"));
-    assertEquals(null, parser.parse("master^{}"));
+    assertNull(parser.parse("master^{}"));
 
     assertEquals(master, repo.getRepository().resolve("master^{commit}"));
-    assertEquals(null, parser.parse("master^{commit}"));
+    assertNull(parser.parse("master^{commit}"));
 
     assertEquals(blob, repo.getRepository().resolve("master:blob"));
-    assertEquals(null, parser.parse("master:blob"));
+    assertNull(parser.parse("master:blob"));
 
     // TestRepository has no simple way of setting the reflog.
     //assertEquals(null, repo.getRepository().resolve("master@{0}"));
-    assertEquals(null, parser.parse("master@{0}"));
+    assertNull(parser.parse("master@{0}"));
   }
 
   @Test
