diff options
Diffstat (limited to 'src/java_tools/junitrunner')
2 files changed, 30 insertions, 8 deletions
diff --git a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilder.java b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilder.java index 56d57c1d86..75199cf144 100644 --- a/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilder.java +++ b/src/java_tools/junitrunner/java/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilder.java @@ -17,12 +17,10 @@ package com.google.testing.junit.runner.junit4; import com.google.testing.junit.runner.model.TestSuiteModel; import com.google.testing.junit.runner.model.TestSuiteModel.Builder; import com.google.testing.junit.runner.util.Supplier; - -import org.junit.runner.Description; -import org.junit.runner.Request; - import javax.inject.Inject; import javax.inject.Singleton; +import org.junit.runner.Description; +import org.junit.runner.Request; /** * Builds a {@link TestSuiteModel} for JUnit4 tests. @@ -49,9 +47,12 @@ class JUnit4TestModelBuilder implements Supplier<TestSuiteModel> { @Override public TestSuiteModel get() { Description root = request.getRunner().getDescription(); + // A test class annotated with @Ignore effectively has no test methods, + // which is what isSuite() tests for. if (!root.isSuite()) { - throw new IllegalArgumentException("Top test must be a suite"); + return builder.build(suiteName); + } else { + return builder.build(suiteName, root); } - return builder.build(suiteName, root); } } diff --git a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilderTest.java b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilderTest.java index b409163617..c1a4efbd00 100644 --- a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilderTest.java +++ b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/junit4/JUnit4TestModelBuilderTest.java @@ -32,6 +32,7 @@ import com.google.testing.junit.runner.sharding.testing.StubShardingEnvironment; import com.google.testing.junit.runner.util.FakeTicker; import com.google.testing.junit.runner.util.Ticker; import java.util.List; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.Description; import org.junit.runner.Request; @@ -92,6 +93,18 @@ public class JUnit4TestModelBuilderTest { } @Test + public void testCreateModel_topLevelIgnore() throws Exception { + Class<?> testClass = SampleTestCaseWithTopLevelIgnore.class; + Request request = Request.classWithoutSuiteMethod(testClass); + String testClassName = testClass.getCanonicalName(); + JUnit4TestModelBuilder modelBuilder = + builder(request, testClassName, stubShardingEnvironment, null, xmlResultWriter); + + TestSuiteModel testSuiteModel = modelBuilder.get(); + assertThat(testSuiteModel.getNumTestCases()).isEqualTo(0); + } + + @Test public void testCreateModel_singleTestClass() throws Exception { Class<?> testClass = SampleTestCaseWithTwoTests.class; Request request = Request.classWithoutSuiteMethod(testClass); @@ -140,7 +153,6 @@ public class JUnit4TestModelBuilderTest { assertThat(model.getNumTestCases()).isEqualTo(1); } - /** Sample test case with two tests. */ @RunWith(JUnit4.class) public static class SampleTestCaseWithTwoTests { @@ -153,6 +165,16 @@ public class JUnit4TestModelBuilderTest { } } + /** Sample test case with top level @Ignore */ + @Ignore + @RunWith(JUnit4.class) + public static class SampleTestCaseWithTopLevelIgnore { + @Test + public void testOne() {} + + @Test + public void testTwo() {} + } /** Sample test case with one test. */ @RunWith(JUnit4.class) @@ -162,7 +184,6 @@ public class JUnit4TestModelBuilderTest { } } - /** Sample suite with one test. */ @RunWith(Suite.class) @SuiteClasses(SampleTestCaseWithOneTest.class) |