diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/ProvideXmlStreamFactory.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/ProvideXmlStreamFactory.java
index dc953e9..e69dd8c 100644
--- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/ProvideXmlStreamFactory.java
+++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/ProvideXmlStreamFactory.java
@@ -16,6 +16,7 @@
 
 import com.google.testing.junit.runner.util.Factory;
 import com.google.testing.junit.runner.util.Supplier;
+import java.io.IOException;
 import java.io.OutputStream;
 
 /**
@@ -25,18 +26,82 @@
   private final Supplier<JUnit4Config> configSupplier;
 
   public ProvideXmlStreamFactory(Supplier<JUnit4Config> configSupplier) {
-    assert configSupplier != null;
+    if (configSupplier == null) {
+      throw new IllegalStateException();
+    }
+
     this.configSupplier = configSupplier;
   }
 
   @Override
   public OutputStream get() {
-    OutputStream outputStream = JUnit4RunnerModule.provideXmlStream(configSupplier.get());
-    assert outputStream != null;
+    OutputStream outputStream =
+        new LazyOutputStream(
+            new Supplier<OutputStream>() {
+              @Override
+              public OutputStream get() {
+                return JUnit4RunnerModule.provideXmlStream(configSupplier.get());
+              }
+            });
+
     return outputStream;
   }
 
   public static Factory<OutputStream> create(Supplier<JUnit4Config> configSupplier) {
     return new ProvideXmlStreamFactory(configSupplier);
   }
+
+  private static class LazyOutputStream extends OutputStream {
+    private Supplier<OutputStream> supplier;
+    private volatile OutputStream delegate;
+
+    public LazyOutputStream(Supplier<OutputStream> supplier) {
+      this.supplier = supplier;
+    }
+
+    private OutputStream ensureDelegate() {
+      OutputStream delegate0 = delegate;
+      if (delegate0 != null) {
+        return delegate0;
+      }
+
+      synchronized (this) {
+        if (delegate == null) {
+          delegate = supplier.get();
+          supplier = null;
+        }
+      }
+
+      return delegate;
+    }
+
+    @Override
+    public void write(int b) throws IOException {
+      ensureDelegate().write(b);
+    }
+
+    @Override
+    public void write(byte[] b, int off, int len) throws IOException {
+      ensureDelegate().write(b, off, len);
+    }
+
+    @Override
+    public void write(byte[] b) throws IOException {
+      ensureDelegate().write(b);
+    }
+
+    @Override
+    public void close() throws IOException {
+      if (delegate != null) {
+        delegate.close();
+      }
+    }
+
+    @Override
+    public void flush() throws IOException {
+      if (delegate != null) {
+        delegate.flush();
+      }
+    }
+  }
 }
