Bird
Raised Fist0
JUnittesting~5 mins

Selecting tests by tags and classes in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of using tags in JUnit tests?
Tags help group tests so you can run specific sets of tests based on their category or purpose, like 'fast' or 'database'.
Click to reveal answer
beginner
How do you tag a test method in JUnit 5?
Use the @Tag annotation above the test method, for example:
@Tag("fast")
void testQuick() { ... }
Click to reveal answer
intermediate
What is the difference between selecting tests by tags and by classes in JUnit?
Selecting by tags runs tests marked with specific tags anywhere in your code. Selecting by classes runs all tests inside specific test classes.
Click to reveal answer
intermediate
How can you run tests from a specific class using the JUnit Console Launcher?
Use the option --select-class=your.package.YourTestClass to run all tests in that class.
Click to reveal answer
advanced
Why is it useful to combine tags and classes when selecting tests?
Combining tags and classes lets you run very specific tests, like only 'slow' tests in a certain class, saving time and focusing on relevant tests.
Click to reveal answer
Which annotation is used to tag tests in JUnit 5?
A@TestCategory
B@Category
C@Tag
D@TestTag
How do you run tests with the tag 'integration' using the JUnit Console Launcher?
A--include-tag integration
B--select-tag integration
C--tags integration
D--filter-tag integration
What happens if you select tests by class name in JUnit?
ARuns tests only if they have no tags
BRuns only tagged tests in that class
CRuns tests in all classes with similar names
DRuns all tests inside that class
Can you combine multiple tags when selecting tests in JUnit?
AYes, you can include multiple tags
BNo, only one tag at a time
COnly if tags are numeric
DOnly if tags are in the same package
Which command runs all tests in the class 'com.example.MyTests'?
A--run-class com.example.MyTests
B--select-class com.example.MyTests
C--include-class com.example.MyTests
D--class-name com.example.MyTests
Explain how you would use tags and classes to run only a subset of tests in a large JUnit project.
Think about grouping tests by purpose and location.
You got /4 concepts.
    Describe the benefits of selecting tests by tags compared to selecting by classes.
    Consider how tests are organized and run.
    You got /4 concepts.

      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