diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index b93db98..98e851c 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -8,7 +8,7 @@
 
 name: Test
 
-on: push
+on: [push, pull_request]
 
 jobs:
   Gradle:
diff --git a/build.gradle b/build.gradle
index a8bd176..2f368ec 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,11 +19,11 @@
 }
 
 test {
-    // JUnit 5 testing integration.
-    useJUnitPlatform()
+    // JUnit 4.
+    useJUnit()
 }
 
-def beamVersion = '2.33.0'
+def beamVersion = '2.39.0'
 dependencies {
     // App dependencies.
     implementation "org.apache.beam:beam-sdks-java-core:${beamVersion}"
@@ -31,7 +31,8 @@
     implementation "org.slf4j:slf4j-jdk14:1.7.32"
 
     // Tests dependencies.
-    testImplementation "org.junit.jupiter:junit-jupiter:5.8.1"
+    testImplementation "junit:junit:4.13.2"
+    testImplementation 'org.hamcrest:hamcrest:2.2'
 }
 
 // Package a self-contained jar file.
diff --git a/build.sbt b/build.sbt
index 5e94af5..357158b 100644
--- a/build.sbt
+++ b/build.sbt
@@ -8,7 +8,7 @@
 
 mainClass := Some("com.example.App")
 
-val beamVersion = "2.33.0"
+val beamVersion = "2.39.0"
 libraryDependencies ++= Seq(
   // App dependencies.
   "org.apache.beam" % "beam-sdks-java-core" % beamVersion,
@@ -16,8 +16,9 @@
   "org.slf4j" % "slf4j-jdk14" % "1.7.32",
 
   // Test dependencies.
-  "net.aichler" % "jupiter-interface" % JupiterKeys.jupiterVersion.value % Test,
-  "org.junit.jupiter" % "junit-jupiter" % "5.8.1" % Test
+  "junit" % "junit" % "4.13.2" % Test,
+  "com.novocode" % "junit-interface" % "0.11" % Test,
+  "org.hamcrest" % "hamcrest" % "2.2" % Test
 )
 
 // Package self-contained jar file.
diff --git a/pom.xml b/pom.xml
index c0e15fe..31a1b3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,8 +21,8 @@
     <maven.compiler.target>11</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
-    <beam.version>2.33.0</beam.version>
-    <junit.version>5.8.1</junit.version>
+    <beam.version>2.39.0</beam.version>
+    <junit.version>4.13.2</junit.version>
   </properties>
 
   <build>
@@ -44,18 +44,11 @@
         </configuration>
       </plugin>
 
-      <!-- JUnit 5 testing integration. -->
+      <!-- JUnit 4 testing integration. -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>3.0.0-M5</version>
-        <dependencies>
-          <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-engine</artifactId>
-            <version>${junit.version}</version>
-          </dependency>
-        </dependencies>
       </plugin>
 
       <!-- Package self-contained jar file. -->
@@ -108,10 +101,17 @@
 
     <!-- Test dependencies -->
     <dependency>
-      <groupId>org.junit.jupiter</groupId>
-      <artifactId>junit-jupiter</artifactId>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
     </dependency>
+
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest</artifactId>
+      <version>2.2</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file
diff --git a/src/main/java/com/example/App.java b/src/main/java/com/example/App.java
index 20e7afe..f5f8a14 100644
--- a/src/main/java/com/example/App.java
+++ b/src/main/java/com/example/App.java
@@ -8,13 +8,18 @@
 
 package com.example;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.apache.beam.sdk.Pipeline;
+import org.apache.beam.sdk.coders.StringUtf8Coder;
 import org.apache.beam.sdk.options.Default;
 import org.apache.beam.sdk.options.Description;
 import org.apache.beam.sdk.options.PipelineOptionsFactory;
 import org.apache.beam.sdk.options.StreamingOptions;
 import org.apache.beam.sdk.transforms.Create;
 import org.apache.beam.sdk.transforms.MapElements;
+import org.apache.beam.sdk.values.PCollection;
 import org.apache.beam.sdk.values.TypeDescriptors;
 
 public class App {
@@ -26,15 +31,20 @@
 		void setInputText(String value);
 	}
 
+	public static PCollection<String> buildPipeline(Pipeline pipeline, String inputText) {
+		return pipeline
+				.apply("Create elements", Create.of(Arrays.asList("Hello", "World!", inputText)))
+				.apply("Print elements",
+						MapElements.into(TypeDescriptors.strings()).via(x -> {
+							System.out.println(x);
+							return x;
+						}));
+	}
+
 	public static void main(String[] args) {
 		var options = PipelineOptionsFactory.fromArgs(args).withValidation().as(Options.class);
-
 		var pipeline = Pipeline.create(options);
-		pipeline.apply("Create elements", Create.of("Hello", "World!", options.getInputText())).apply("Print elements",
-				MapElements.into(TypeDescriptors.strings()).via(x -> {
-					System.out.println(x);
-					return x;
-				}));
-		pipeline.run();
+		App.buildPipeline(pipeline, options.getInputText());
+		pipeline.run().waitUntilFinish();
 	}
 }
\ No newline at end of file
diff --git a/src/test/java/com/example/AppTest.java b/src/test/java/com/example/AppTest.java
index c7a47e3..a259d12 100644
--- a/src/test/java/com/example/AppTest.java
+++ b/src/test/java/com/example/AppTest.java
@@ -8,13 +8,25 @@
 
 package com.example;
 
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.beam.sdk.Pipeline;
+import org.apache.beam.sdk.testing.PAssert;
+import org.apache.beam.sdk.testing.TestPipeline;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
 
+@RunWith(JUnit4.class)
 public class AppTest {
+	@Rule
+	public final transient TestPipeline pipeline = TestPipeline.create();
+
 	@Test
 	public void appRuns() {
-		App.main(new String[] {});
-		assertEquals(1 + 1, 2);
+		var elements = App.buildPipeline(pipeline, "Test");
+
+		// Note that the order of the elements doesn't matter.
+		PAssert.that(elements).containsInAnyOrder("Test", "Hello", "World!");
+		pipeline.run().waitUntilFinish();
 	}
 }
