diff --git a/.bazelrc b/.bazelrc
index 1fb0c7a..b3686d8 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1 +1,2 @@
 build --strategy=KotlinCompile=worker
+build --test_output=errors
diff --git a/tests/integrationtests/BUILD b/tests/integrationtests/BUILD
index e985ee0..0d16629 100644
--- a/tests/integrationtests/BUILD
+++ b/tests/integrationtests/BUILD
@@ -16,8 +16,6 @@
 test_suite(
     name = "integrationtests",
     tests=[
-        "//tests/integrationtests/jvm:basic_tests",
-        "//tests/integrationtests/jvm:annoation_processing_tests",
-        "//tests/integrationtests/jvm/basic:test_friends_tests"
+        "//tests/integrationtests/jvm"
     ]
 )
\ No newline at end of file
diff --git a/tests/integrationtests/jvm/BUILD b/tests/integrationtests/jvm/BUILD
index 2a56567..67d50f6 100644
--- a/tests/integrationtests/jvm/BUILD
+++ b/tests/integrationtests/jvm/BUILD
@@ -22,8 +22,24 @@
 )
 
 kt_it_assertion_test(
-    name = "annoation_processing_tests",
+    name = "kapt_tests",
     cases = "//tests/integrationtests/jvm/kapt:cases",
-    test_class="io.bazel.kotlin.testing.jvm.JvmAnnotationProcessingFunctionalTests",
+    test_class="io.bazel.kotlin.testing.jvm.KaptTests",
     data = [  "//examples/dagger:coffee_app"]
 )
+
+kt_it_assertion_test(
+    name = "example_tests",
+    test_class="io.bazel.kotlin.testing.jvm.JvmExampleTests",
+    data = [  "//examples/dagger:coffee_app"]
+)
+
+test_suite(
+    name = "jvm",
+    tests = [
+        ":basic_tests",
+        ":kapt_tests",
+        ":example_tests",
+        "//tests/integrationtests/jvm/basic:friends_tests"
+    ]
+)
diff --git a/tests/integrationtests/jvm/JvmExampleTests.kt b/tests/integrationtests/jvm/JvmExampleTests.kt
new file mode 100644
index 0000000..2129824
--- /dev/null
+++ b/tests/integrationtests/jvm/JvmExampleTests.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2018 The Bazel Authors. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.bazel.kotlin.testing.jvm
+
+import io.bazel.kotlin.testing.BasicAssertionTestCase
+import org.junit.Test
+
+/**
+ * These tests verify properties of the example.
+ */
+class JvmExampleTests: BasicAssertionTestCase() {
+    @Test
+    fun daggerExampleIsRunnable() {
+        assertExecutableRunfileSucceeds("//examples/dagger/coffee_app",
+            description = "the dagger coffee_app should execute succesfully")
+    }
+}
\ No newline at end of file
diff --git a/tests/integrationtests/jvm/JvmAnnotationProcessingFunctionalTests.kt b/tests/integrationtests/jvm/KaptTests.kt
similarity index 92%
rename from tests/integrationtests/jvm/JvmAnnotationProcessingFunctionalTests.kt
rename to tests/integrationtests/jvm/KaptTests.kt
index 1b3fbfe..2e817c7 100644
--- a/tests/integrationtests/jvm/JvmAnnotationProcessingFunctionalTests.kt
+++ b/tests/integrationtests/jvm/KaptTests.kt
@@ -18,7 +18,7 @@
 import io.bazel.kotlin.testing.AssertionTestCase
 import org.junit.Test
 
-class JvmAnnotationProcessingFunctionalTests : AssertionTestCase("tests/integrationtests/jvm/kapt") {
+class KaptTests : AssertionTestCase("tests/integrationtests/jvm/kapt") {
     @Test
     fun testKotlinOnlyAnnotationProcessing() {
         jarTestCase("ap_kotlin.jar", description = "annotation processing should work") {
@@ -78,9 +78,4 @@
             )
         }
     }
-
-    @Test
-    fun daggerExampleIsRunnable() {
-        assertExecutableRunfileSucceeds("//examples/dagger/coffee_app", description = "the dagger coffee_app should execute succesfully")
-    }
 }
\ No newline at end of file
diff --git a/tests/integrationtests/jvm/basic/BUILD b/tests/integrationtests/jvm/basic/BUILD
index 29baf44..16950c4 100644
--- a/tests/integrationtests/jvm/basic/BUILD
+++ b/tests/integrationtests/jvm/basic/BUILD
@@ -105,7 +105,7 @@
 
 # This test should be explicetly executed as module name mangling handling could regress otherwise.
 kt_jvm_test(
-    name = "test_friends_tests",
+    name = "friends_tests",
     srcs = ["test_friends/TestFriendsTest.kt"],
     test_class = "test.TestFriendsTest",
     deps = [
diff --git a/tests/rules/AssertionTestCase.kt b/tests/rules/AssertionTestCase.kt
index a701762..0e44ea7 100644
--- a/tests/rules/AssertionTestCase.kt
+++ b/tests/rules/AssertionTestCase.kt
@@ -22,10 +22,10 @@
 import java.util.jar.JarFile
 import kotlin.test.fail
 
-class TestCaseFailedException(description: String? = null, ex: Throwable):
-        AssertionError(""""$description" failed, error: ${ex.message}""", ex)
+class TestCaseFailedException(description: String? = null, ex: Throwable) :
+    AssertionError(""""$description" failed, error: ${ex.message}""", ex)
 
-abstract class AssertionTestCase(root: String) {
+abstract class AssertionTestCase(root: String) : BasicAssertionTestCase() {
     private val testRunfileRoot: Path = Paths.get(root).also {
         it.toFile().also {
             assert(it.exists()) { "runfile directory $root does not exist" }
@@ -34,46 +34,65 @@
     }
 
     private inline fun runTestCase(description: String? = null, op: () -> Unit) =
-            try { op() }
-            catch(t: Throwable) {
-                when(t) {
-                    is AssertionError -> throw TestCaseFailedException(description, t)
-                    is Exception -> throw TestCaseFailedException(description, t)
-                    else -> throw t
-                }
+        try {
+            op()
+        } catch (t: Throwable) {
+            when (t) {
+                is AssertionError -> throw TestCaseFailedException(description, t)
+                is Exception -> throw TestCaseFailedException(description, t)
+                else -> throw t
             }
+        }
 
     private fun testCaseJar(jarName: String) = testRunfileRoot.resolve(jarName).toFile().let {
         check(it.exists()) { "jar $jarName did not exist in test case root $testRunfileRoot" }
         JarFile(it)
     }
 
-    private fun jarTestCase(name: String, op: JarFile.() -> Unit) { testCaseJar(name).also { op(it) } }
-    protected fun jarTestCase(name: String, description: String? = null, op: JarFile.() -> Unit) { runTestCase(description, { jarTestCase(name, op) }) }
+    private fun jarTestCase(name: String, op: JarFile.() -> Unit) {
+        testCaseJar(name).also { op(it) }
+    }
+
+    protected fun jarTestCase(name: String, description: String? = null, op: JarFile.() -> Unit) {
+        runTestCase(description, { jarTestCase(name, op) })
+    }
 
 
     protected fun JarFile.assertContainsEntries(vararg entries: String) {
-        entries.forEach { if(this.getJarEntry(it) == null) { fail("jar ${this.name} did not contain entry $it") } }
-    }
-
-    protected fun JarFile.assertDoesNotContainEntries(vararg entries: String) {
-        entries.forEach { if(this.getJarEntry(it) != null) { fail("jar ${this.name} contained entry $it") } }
-    }
-
-    private fun String.resolveDirectory(): File =
-            if (startsWith("/"))
-                trimStart('/').split("/").let { File(it.take(it.size - 1).joinToString(File.separator)) }
-            else
-                testRunfileRoot.toFile()
-
-    protected fun assertExecutableRunfileSucceeds(executable: String, description: String? = null) {
-        ProcessBuilder().command("bash", "-c", Paths.get(executable).fileName.toString())
-                .also { it.directory(executable.resolveDirectory()) }
-                .start().let {
-            it.waitFor(5, TimeUnit.SECONDS)
-            assert(it.exitValue() == 0) {
-                throw TestCaseFailedException(description, RuntimeException("non-zero return code: ${it.exitValue()}"))
+        entries.forEach {
+            if (this.getJarEntry(it) == null) {
+                fail("jar ${this.name} did not contain entry $it")
             }
         }
     }
+
+    protected fun JarFile.assertDoesNotContainEntries(vararg entries: String) {
+        entries.forEach {
+            if (this.getJarEntry(it) != null) {
+                fail("jar ${this.name} contained entry $it")
+            }
+        }
+    }
+
+    override fun String.resolveDirectory(): File =
+        if (startsWith("/"))
+            trimStart('/').split("/").let { File(it.take(it.size - 1).joinToString(File.separator)) }
+        else
+            testRunfileRoot.toFile()
+}
+
+abstract class BasicAssertionTestCase {
+    protected fun assertExecutableRunfileSucceeds(executable: String, description: String? = null) {
+        ProcessBuilder().command("bash", "-c", Paths.get(executable).fileName.toString())
+            .also { it.directory(executable.resolveDirectory()) }
+            .start().let {
+                it.waitFor(5, TimeUnit.SECONDS)
+                assert(it.exitValue() == 0) {
+                    throw TestCaseFailedException(description, RuntimeException("non-zero return code: ${it.exitValue()}"))
+                }
+            }
+    }
+
+    protected open fun String.resolveDirectory(): File =
+        trimStart('/').split("/").let { File(it.take(it.size - 1).joinToString(File.separator)) }
 }
\ No newline at end of file
diff --git a/tests/rules/defs.bzl b/tests/rules/defs.bzl
index 9a92d32..95be157 100644
--- a/tests/rules/defs.bzl
+++ b/tests/rules/defs.bzl
@@ -19,13 +19,15 @@
     "//third_party/jvm/junit:junit"
 ]
 
-def kt_it_assertion_test(name, cases, test_class, data = [], deps=[]):
+def kt_it_assertion_test(name, test_class, cases=None, data = [], deps=[]):
     parts=test_class.split(".")
+    if cases:
+        data = data + [cases]
     kt_jvm_test(
         name=name,
         srcs=["%s.kt" % parts[len(parts)-1]],
         deps = _TEST_COMMON_DEPS + deps,
         test_class=test_class,
-        data=[cases] + data,
+        data=data,
         visibility=["//visibility:private"]
     )
\ No newline at end of file
