Bird
Raised Fist0
JUnittesting~20 mins

Selecting tests by tags and classes in JUnit - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Tag & Class Test Selector Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of JUnit test run with tag filter
Given the following JUnit 5 test classes with tags, what will be the output when running tests with the tag @Tag("fast") only?
JUnit
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class FastTests {
    @Test
    @Tag("fast")
    void fastTest1() {
        assertTrue(true);
    }

    @Test
    @Tag("slow")
    void slowTest1() {
        assertTrue(true);
    }
}

public class MixedTests {
    @Test
    @Tag("fast")
    void fastTest2() {
        assertTrue(true);
    }

    @Test
    void noTagTest() {
        assertTrue(true);
    }
}
AOnly slowTest1 runs because it has a tag; others are skipped.
BAll tests run regardless of tags and all pass.
COnly tests without tags run; fastTest1, fastTest2, and slowTest1 are skipped.
DOnly fastTest1 and fastTest2 run and pass; slowTest1 and noTagTest are skipped.
Attempts:
2 left
💡 Hint
Remember that JUnit 5 allows filtering tests by tags using the @Tag annotation and test runners can include or exclude tests by tag.
❓ assertion
intermediate
1:30remaining
Correct assertion to verify only tagged tests ran
You run JUnit tests filtered by tag "integration". Which assertion correctly verifies that only tests with this tag ran?
JUnit
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

// Assume testResults is a list of test names that ran
List<String> testResults = List.of("integrationTest1", "integrationTest2");
AassertEquals(2, testResults.size());
BassertEquals(4, testResults.size());
CassertEquals(0, testResults.size());
DassertEquals(1, testResults.size());
Attempts:
2 left
💡 Hint
Count how many tests have the "integration" tag and expect only those to run.
🔧 Debug
advanced
2:00remaining
Why does filtering by tag fail to exclude untagged tests?
You configured your JUnit 5 test run to include only tests with tag "ui" but untagged tests still run. What is the most likely cause?
AThe test runner configuration is missing the tag filter include directive.
BTests without tags are always included by default and cannot be excluded.
CJUnit 5 does not support filtering by tags.
DThe @Tag annotation is only for documentation and does not affect test execution.
Attempts:
2 left
💡 Hint
Check your test runner or build tool configuration for tag filtering settings.
❓ framework
advanced
1:30remaining
Selecting tests by class and tag in JUnit 5
Which JUnit 5 command line option runs only tests in class LoginTests tagged with smoke?
Ajunit-platform-console --select-package=LoginTests --include-tags=smoke
Bjunit-platform-console --select-package=LoginTests --exclude-tags=smoke
Cjunit-platform-console --select-class=LoginTests --include-tags=smoke
Djunit-platform-console --select-class=LoginTests --exclude-tags=smoke
Attempts:
2 left
💡 Hint
Use --select-class to specify the test class and --include-tags to filter by tag.
🧠 Conceptual
expert
2:30remaining
Impact of multiple tags on test selection
If a test method is annotated with @Tag("fast") and @Tag("database"), and the test run includes only tests tagged "fast", what happens?
AThe test is excluded because it has more than one tag.
BThe test runs because it has the "fast" tag, even though it also has "database".
CThe test runs only if both tags are included in the filter.
DThe test is excluded because it has the "database" tag.
Attempts:
2 left
💡 Hint
Think about how tag filters include tests that have at least one matching tag.

Practice

(1/5)
1. What is the main purpose of using @Tag in JUnit tests?
easy
A. To change the test method names automatically
B. To group tests so you can run specific sets easily
C. To skip tests permanently
D. To define the order in which tests run

Solution

  1. Step 1: Understand the role of @Tag annotation

    The @Tag annotation is used to label tests with a category or group name.
  2. Step 2: Identify the benefit of tagging tests

    Tagging allows you to select and run only tests with specific tags, making test runs focused and faster.
  3. Final Answer:

    To group tests so you can run specific sets easily -> Option B
  4. Quick Check:

    Tags group tests for selective runs [OK]
Hint: Tags group tests for selective execution [OK]
Common Mistakes:
  • Thinking @Tag changes test order
  • Believing @Tag skips tests permanently
  • Assuming @Tag renames test methods
2. Which of the following is the correct way to tag a test method in JUnit 5?
easy
A. @Tag("fast") public void testMethod() {}
B. @Tag fast public void testMethod() {}
C. @Tag:fast public void testMethod() {}
D. @Tag = "fast" public void testMethod() {}

Solution

  1. Step 1: Recall correct annotation syntax in Java

    Annotations use the format @AnnotationName("value") with parentheses and quotes for string values.
  2. Step 2: Match the correct syntax for @Tag

    @Tag("fast") public void testMethod() {} uses @Tag("fast") correctly before the method declaration.
  3. Final Answer:

    @Tag("fast") public void testMethod() {} -> Option A
  4. Quick Check:

    Annotation syntax = @Tag("value") [OK]
Hint: Annotations need parentheses and quotes for string values [OK]
Common Mistakes:
  • Omitting parentheses around tag value
  • Missing quotes around the tag string
  • Using colon or equals instead of parentheses
3. Given the following test class, which tests will run if you execute with the tag filter --include-tag fast?
@Tag("slow")
class ExampleTests {
  @Test
  void testA() {}

  @Test
  @Tag("fast")
  void testB() {}

  @Test
  @Tag("fast")
  void testC() {}
}
medium
A. Only testA
B. All tests: testA, testB, testC
C. Only testB and testC
D. No tests run

Solution

  1. Step 1: Understand tag filtering behavior

    When running with --include-tag fast, only tests tagged with "fast" run.
  2. Step 2: Analyze tags on each test

    Class has @Tag("slow"), so by default tests inherit "slow" tag. testA has no method tag, so only "slow" applies. testB and testC have @Tag("fast") overriding or adding to tags.
  3. Step 3: Determine which tests match "fast" tag

    Only testB and testC have the "fast" tag, so only these run.
  4. Final Answer:

    Only testB and testC -> Option C
  5. Quick Check:

    Include tag "fast" runs only tests tagged "fast" [OK]
Hint: Method tags override class tags for filtering [OK]
Common Mistakes:
  • Assuming class tag applies to all tests ignoring method tags
  • Thinking all tests run without tag filtering
  • Confusing include and exclude tag filters
4. You want to run tests only from the class LoginTests but your command mvn test -Dgroups=LoginTests runs no tests. What is the likely problem?
medium
A. The command should be mvn test -Dtest=LoginTests to run by class
B. JUnit 5 uses tags, not groups; the correct filter is by tags or class name
C. You must add @Group annotation to the class for this to work
D. The class name is case-sensitive and must be lowercase

Solution

  1. Step 1: Understand Maven test filtering options

    Maven Surefire plugin uses -Dtest=ClassName to run tests by class name, not -Dgroups.
  2. Step 2: Identify correct command to run tests by class

    To run tests from LoginTests, use mvn test -Dtest=LoginTests.
  3. Final Answer:

    The command should be mvn test -Dtest=LoginTests to run by class -> Option A
  4. Quick Check:

    Run by class uses -Dtest=ClassName [OK]
Hint: Use -Dtest=ClassName to run tests by class [OK]
Common Mistakes:
  • Using -Dgroups which is for TestNG, not JUnit
  • Assuming class names are lowercase
  • Expecting @Group annotation in JUnit
5. You have two test classes: FastTests tagged with @Tag("fast") and SlowTests tagged with @Tag("slow"). You want to run all tests except those tagged "slow" and only from classes whose names end with "Tests". Which command correctly runs this selection?
hard
A. junit-platform-console --exclude-tag slow --exclude-classname .*Tests
B. junit-platform-console --include-tag fast --include-classname .*Tests
C. junit-platform-console --include-tag slow --include-classname FastTests
D. junit-platform-console --exclude-tag slow --include-classname .*Tests

Solution

  1. Step 1: Understand tag and class name filters

    To exclude slow tests, use --exclude-tag slow. To include only classes ending with "Tests", use --include-classname .*Tests regex.
  2. Step 2: Analyze each option

    junit-platform-console --exclude-tag slow --include-classname .*Tests excludes slow tags and includes classes matching .*Tests, which matches both FastTests and SlowTests classes but excludes slow-tagged tests.
  3. Step 3: Confirm correct filtering

    junit-platform-console --include-tag fast --include-classname .*Tests includes only fast tags, which works but excludes any untagged tests. junit-platform-console --exclude-tag slow --exclude-classname .*Tests excludes classes ending with Tests, which is opposite of requirement. junit-platform-console --include-tag slow --include-classname FastTests includes slow tags, which is opposite of requirement.
  4. Final Answer:

    junit-platform-console --exclude-tag slow --include-classname .*Tests -> Option D
  5. Quick Check:

    Exclude slow tag + include class regex = junit-platform-console --exclude-tag slow --include-classname .*Tests [OK]
Hint: Exclude slow tag and include class regex for correct filtering [OK]
Common Mistakes:
  • Using include-tag slow instead of exclude-tag
  • Excluding classes instead of including
  • Confusing include-tag and exclude-tag usage
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard