diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java
index 52da7f0..03b22ee 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java
@@ -18,10 +18,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.util.ResourceUsage;
 import com.google.devtools.build.skyframe.AbstractSkyFunctionEnvironment;
-import com.google.devtools.build.skyframe.BuildDriver;
-import com.google.devtools.build.skyframe.EvaluationContext;
 import com.google.devtools.build.skyframe.EvaluationResult;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -29,38 +26,29 @@
 import com.google.devtools.build.skyframe.ValueOrUntypedException;
 import java.util.Map;
 
-/** A skyframe environment that can be used to evaluate arbitrary skykeys for testing. */
+/**
+ * A {@link SkyFunction.Environment} backed by a {@link SkyframeExecutor} that can be used to
+ * evaluate arbitrary {@link SkyKey}s for testing.
+ */
 public class SkyFunctionEnvironmentForTesting extends AbstractSkyFunctionEnvironment
     implements SkyFunction.Environment {
 
-  private final BuildDriver buildDriver;
   private final ExtendedEventHandler eventHandler;
   private final SkyframeExecutor skyframeExecutor;
 
-  /** Creates a SkyFunctionEnvironmentForTesting that uses a BuildDriver to evaluate skykeys. */
-  public SkyFunctionEnvironmentForTesting(
-      BuildDriver buildDriver,
-      ExtendedEventHandler eventHandler,
-      SkyframeExecutor skyframeExecutor) {
-    this.buildDriver = buildDriver;
+  SkyFunctionEnvironmentForTesting(
+      ExtendedEventHandler eventHandler, SkyframeExecutor skyframeExecutor) {
     this.eventHandler = eventHandler;
     this.skyframeExecutor = skyframeExecutor;
   }
 
   @Override
   protected Map<SkyKey, ValueOrUntypedException> getValueOrUntypedExceptions(
-      Iterable<? extends SkyKey> depKeys) throws InterruptedException {
+      Iterable<? extends SkyKey> depKeys) {
     ImmutableMap.Builder<SkyKey, ValueOrUntypedException> resultMap = ImmutableMap.builder();
     Iterable<SkyKey> keysToEvaluate = ImmutableList.copyOf(depKeys);
-    EvaluationContext evaluationContext =
-        EvaluationContext.newBuilder()
-            .setKeepGoing(true)
-            .setNumThreads(ResourceUsage.getAvailableProcessors())
-            .setEventHander(eventHandler)
-            .build();
     EvaluationResult<SkyValue> evaluationResult =
         skyframeExecutor.evaluateSkyKeys(eventHandler, keysToEvaluate, true);
-    buildDriver.evaluate(depKeys, evaluationContext);
     for (SkyKey depKey : ImmutableSet.copyOf(depKeys)) {
       resultMap.put(depKey, ValueOrUntypedException.ofValueUntyped(evaluationResult.get(depKey)));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 8c2bfc2..171b64a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1176,7 +1176,7 @@
   @VisibleForTesting
   public SkyFunctionEnvironmentForTesting getSkyFunctionEnvironmentForTesting(
       ExtendedEventHandler eventHandler) {
-    return new SkyFunctionEnvironmentForTesting(buildDriver, eventHandler, this);
+    return new SkyFunctionEnvironmentForTesting(eventHandler, this);
   }
 
   /**
