diff --git a/.classpath b/.classpath
index 0d26dc0..3936e91 100644
--- a/.classpath
+++ b/.classpath
@@ -9,6 +9,6 @@
 	<classpathentry kind="lib" path="runfiles/com_google_truth/jar/truth-0.31.jar"/>
 	<classpathentry kind="lib" path="runfiles/org_junit/jar/junit-4.11.jar"/>
 	<classpathentry kind="lib" path="runfiles/org_hamcrest_core/jar/hamcrest-core-1.3.jar"/>
-	<classpathentry kind="lib" path="runfiles/build_bazel_integration_testing/java/build/bazel/tests/integration/libintegration.jar"/>
+	<classpathentry kind="lib" path="runfiles/build_bazel_integration_testing/java/build/bazel/tests/integration/libworkspace_driver.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/WORKSPACE b/WORKSPACE
index f469cd9..4cd8a15 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -12,9 +12,9 @@
 # TODO(dmarting): switch to release version of integration testing
 http_archive(
     name = "build_bazel_integration_testing",
-    url = "https://github.com/bazelbuild/bazel-integration-testing/archive/55a6a70dbcc2cc7699ee715746fb1452788f8d3c.zip",
-    sha256 = "b505866c12b9f6ce08b96a16305407deae43bef7655a8e7c2197d08c24c6cb04",
-    strip_prefix = "bazel-integration-testing-55a6a70dbcc2cc7699ee715746fb1452788f8d3c",
+    url = "https://github.com/bazelbuild/bazel-integration-testing/archive/7ace2e7fbfc32f89222a85804b574a1e07583ddc.zip",
+    sha256 = "44de2377d38ad2386be132a21bae9b61291d546303747d72b454a735e18fa923",
+    strip_prefix = "bazel-integration-testing-7ace2e7fbfc32f89222a85804b574a1e07583ddc",
 )
 
 load("@build_bazel_integration_testing//tools:bazel_java_integration_test.bzl", "bazel_java_integration_test_deps")
diff --git a/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest.java b/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest.java
index 08855a3..a14fc29 100644
--- a/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest.java
+++ b/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest.java
@@ -18,35 +18,44 @@
 import static org.junit.Assert.assertEquals;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
 
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import build.bazel.tests.integration.Command;
-import build.bazel.tests.integration.BazelBaseTestCase;
+import build.bazel.tests.integration.WorkspaceDriver;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.bazel.e4b.command.IdeBuildInfo;
 
 /** Integration test for the aspect used by the plugin. */
-public final class AspectIntegrationTest extends BazelBaseTestCase {
+public final class AspectIntegrationTest {
 
-  private File aspectWorkspace;
+  private WorkspaceDriver driver = new WorkspaceDriver();
+  private Path aspectWorkspace;
+
+  @BeforeClass
+  public static void setUpClass() throws IOException {
+    WorkspaceDriver.setUpClass();
+  }
 
   @Before
-  @Override
   public void setUp() throws Exception {
-    super.setUp();
-    aspectWorkspace = workspace;
-    copyFromRunfiles("build_bazel_eclipse/resources/e4b_aspect.bzl", "e4b_aspect.bzl");
-    scratchFile("BUILD");
-    newWorkspace();
+    driver.setUp();
+    aspectWorkspace = driver.currentWorkspace();
+    driver.copyFromRunfiles("build_bazel_eclipse/resources/e4b_aspect.bzl", "e4b_aspect.bzl");
+    driver.scratchFile("BUILD");
+    driver.newWorkspace();
     createJavaProgram();
   }
 
   private void createJavaProgram() throws Exception {
-    scratchFile("java/my/pkg/Main.java", // force-new-line
+    driver.scratchFile("java/my/pkg/Main.java", // force-new-line
         "package my.pkg;", // force-new-line
         "import my.other.pkg.Annex;", // force-new-line
         "public class Main {", // force-new-line
@@ -54,11 +63,11 @@
         "    System.out.println(new Annex().helloWorld());", // force-new-line
         "  }", // force-new-line
         "}");
-    scratchFile("java/my/pkg/BUILD", // force-new-line
+    driver.scratchFile("java/my/pkg/BUILD", // force-new-line
         "java_binary(name='pkg',", // force-new-line
         "            srcs=['Main.java'],", // force-new-line
         "            deps=['//java/my/other/pkg:Annex'])");
-    scratchFile("java/my/other/pkg/Annex.java", // force-new-line
+    driver.scratchFile("java/my/other/pkg/Annex.java", // force-new-line
         "package my.other.pkg;", // force-new-line
 
 
@@ -69,11 +78,11 @@
         "    return \"Hello, World!\";", // force-new-line
         "  }", // force-new-line
         "}");
-    scratchFile("java/my/other/pkg/BUILD", // force-new-line
+    driver.scratchFile("java/my/other/pkg/BUILD", // force-new-line
         "java_library(name='Annex',", // force-new-line
         "             srcs=['Annex.java'],", // force-new-line
         "             visibility = ['//visibility:public'])");
-    scratchFile("javatests/my/other/pkg/AnnexTest.java", // force-new-line
+    driver.scratchFile("javatests/my/other/pkg/AnnexTest.java", // force-new-line
         "package my.other.pkg;", // force-new-line
 
         "import static org.junit.Assert.assertEquals;", // force-new-line
@@ -86,7 +95,7 @@
         "    assertEquals(\"Hello, World!\", new Annex().helloWorld());", // force-new-line
         "  }", // force-new-line
         "}");
-    scratchFile("javatests/my/other/pkg/BUILD", // force-new-line
+    driver.scratchFile("javatests/my/other/pkg/BUILD", // force-new-line
         "java_test(name='AnnexTest',", // force-new-line
         "          srcs=['AnnexTest.java'],", // force-new-line
         "          deps=['//java/my/other/pkg:Annex'])");
@@ -94,12 +103,12 @@
 
   @Test
   public void testAspectGenerateJson() throws Exception {
-    Command cmd = bazel("build", "--override_repository=local_eclipse_aspect=" + aspectWorkspace,
+    Command cmd = driver.bazelCommand("build", "--override_repository=local_eclipse_aspect=" + aspectWorkspace,
         "--aspects=@local_eclipse_aspect//:e4b_aspect.bzl%e4b_aspect", "-k",
         "--output_groups=ide-info-text,ide-resolve,-_,-defaults", "--experimental_show_artifacts",
-        "//...");
+        "//...").build();
     int retCode = cmd.run();
-    assertEquals("Bazel failed to build, stderr: " + LINE_JOINER.join(cmd.getErrorLines()),
+    assertEquals("Bazel failed to build, stderr: " + Joiner.on("\n").join(cmd.getErrorLines()),
         0, retCode);
     String[] jsonFiles = cmd.getErrorLines().stream().filter((s) -> {
       return s.startsWith(">>>") && s.endsWith(".json");
diff --git a/javatests/com/google/devtools/bazel/e4b/integration/BUILD b/javatests/com/google/devtools/bazel/e4b/integration/BUILD
index ead98ca..aafae9e 100644
--- a/javatests/com/google/devtools/bazel/e4b/integration/BUILD
+++ b/javatests/com/google/devtools/bazel/e4b/integration/BUILD
@@ -6,6 +6,8 @@
     data = ["//resources:srcs"],
     deps = [
         "//java/com/google/devtools/bazel/e4b/command",
+        "@org_junit//jar",
+        "@org_hamcrest_core//jar",
         "@com_google_guava//jar",
         "@com_google_truth//jar",
     ],
diff --git a/runfiles b/runfiles
index 859b3f5..f72392e 120000
--- a/runfiles
+++ b/runfiles
@@ -1 +1 @@
-bazel-bin/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest/bazel0.5.0.runfiles
\ No newline at end of file
+bazel-bin/javatests/com/google/devtools/bazel/e4b/integration/AspectIntegrationTest/bazel0.10.0.runfiles
\ No newline at end of file
