Bird
Raised Fist0
JUnittesting~15 mins

@Tag for categorization in JUnit - Build an Automation Script

Choose your learning style10 modes available
Verify test execution filtering using @Tag annotation
Preconditions (2)
Step 1: Run tests with the tag filter set to 'fast'
Step 2: Observe which tests are executed
Step 3: Run tests with the tag filter set to 'slow'
Step 4: Observe which tests are executed
✅ Expected Result: Only tests with the specified tag are executed in each run
Automation Requirements - JUnit 5
Assertions Needed:
Verify that tests with the selected tag run
Verify that tests without the selected tag do not run
Best Practices:
Use @Tag annotation on test methods for categorization
Use JUnit 5's built-in tag filtering to run specific groups
Keep test methods independent and clearly tagged
Automated Solution
JUnit
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class TagExampleTest {

    @Test
    @Tag("fast")
    void fastTest() {
        assertTrue(true, "Fast test should always pass");
    }

    @Test
    @Tag("slow")
    void slowTest() {
        assertTrue(true, "Slow test should always pass");
    }

    @Test
    void untaggedTest() {
        assertTrue(true, "Untagged test should always pass");
    }
}

/*
To run tests with tag 'fast', use:

mvn test -Dgroups=fast

or configure your IDE or build tool to include only @Tag("fast") tests.

This example shows how to categorize tests and run them selectively.
*/

This code defines three test methods: one tagged as fast, one as slow, and one without any tag.

The @Tag annotation categorizes tests. You can run tests filtered by these tags using your build tool or IDE settings.

Assertions simply verify the tests run and pass. The untagged test runs unless filtered out.

This setup helps organize tests by speed or type, making test runs faster and more focused.

Common Mistakes - 3 Pitfalls
Not using @Tag annotation on test methods
{'mistake': "Using the same tag name inconsistently (e.g., 'Fast' vs 'fast')", 'why_bad': 'Tag filtering is case-sensitive, so inconsistent tags cause unexpected test runs.', 'correct_approach': 'Use consistent lowercase tag names throughout the project.'}
Trying to filter tests without configuring the build tool or IDE
Bonus Challenge

Add tests with multiple tags and run tests that match any of the tags

Show Hint

Practice

(1/5)
1. What is the main purpose of the @Tag annotation in JUnit?
easy
A. To mark tests as deprecated
B. To define the order in which tests run
C. To group tests for easier selection and filtering
D. To specify the timeout for a test

Solution

  1. Step 1: Understand the role of @Tag

    @Tag is used to label tests with categories or groups.
  2. Step 2: Identify the purpose of grouping

    Grouping helps to select or exclude tests easily during test runs.
  3. Final Answer:

    To group tests for easier selection and filtering -> Option C
  4. Quick Check:

    @Tag groups tests = A [OK]
Hint: Tags group tests to run or skip categories fast [OK]
Common Mistakes:
  • Confusing @Tag with test execution order
  • Thinking @Tag sets test timeouts
  • Assuming @Tag marks tests deprecated
2. Which of the following is the correct syntax to tag a test method with the tag "fast" 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

    Annotations use parentheses with string literals for parameters, e.g., @Tag("fast").
  2. Step 2: Check each option's syntax

    Only @Tag("fast") public void testMethod() {} uses correct parentheses and quotes syntax.
  3. Final Answer:

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

    Annotation syntax = parentheses + quotes [OK]
Hint: Use parentheses and quotes for annotation parameters [OK]
Common Mistakes:
  • Using square brackets instead of parentheses
  • Omitting quotes around tag name
  • Using curly braces or colons incorrectly
3. Given the following test class, which tests will run if you execute tests with the tag "integration"?
@Tag("integration")
class DatabaseTests {
  @Test void testConnection() {}
  @Test @Tag("slow") void testQueryPerformance() {}
}

@Tag("unit")
class ServiceTests {
  @Test void testServiceLogic() {}
}
medium
A. All three tests
B. Only testQueryPerformance()
C. Only testServiceLogic()
D. Both testConnection() and testQueryPerformance()

Solution

  1. Step 1: Understand class-level and method-level tags

    Class DatabaseTests is tagged "integration", so all its tests inherit this tag unless excluded.
  2. Step 2: Check method tags inside DatabaseTests

    testConnection() inherits "integration" tag; testQueryPerformance() has both "integration" (from class) and "slow" tags.
  3. Step 3: Check ServiceTests tags

    ServiceTests is tagged "unit", so its tests do not run when filtering by "integration".
  4. Final Answer:

    Both testConnection() and testQueryPerformance() -> Option D
  5. Quick Check:

    Class tag applies to all methods unless excluded [OK]
Hint: Class tags apply to all methods inside by default [OK]
Common Mistakes:
  • Ignoring class-level tags on methods
  • Assuming method tags override class tags completely
  • Running tests with unrelated tags
4. You wrote the following test method but it does not run when you filter tests by the tag "fast". What is the likely problem?
@Test
@Tag(fast)
void quickTest() {}
medium
A. Missing quotes around the tag name "fast"
B. The @Test annotation must come after @Tag
C. The method name must start with 'test'
D. The tag name "fast" is not allowed in JUnit

Solution

  1. Step 1: Check syntax of @Tag annotation

    Tag names must be string literals in quotes, e.g., @Tag("fast").
  2. Step 2: Identify the error in the code

    Here, fast is unquoted, so it is treated as an undefined variable, causing the tag to be ignored.
  3. Final Answer:

    Missing quotes around the tag name "fast" -> Option A
  4. Quick Check:

    Tag names need quotes [OK]
Hint: Always put tag names inside quotes [OK]
Common Mistakes:
  • Forgetting quotes around tag strings
  • Thinking annotation order matters here
  • Assuming method name affects tag filtering
5. You want to run only tests tagged as "fast" but exclude those also tagged "database". Which JUnit 5 command line option correctly achieves this?
hard
A. --include-tag fast --exclude-tag database
B. --tags fast,database
C. --include-tag database --exclude-tag fast
D. --tags fast --exclude-tags database

Solution

  1. Step 1: Understand tag filtering options

    JUnit 5 supports including and excluding tags separately with --include-tag and --exclude-tag options.
  2. Step 2: Analyze each option

    --include-tag fast --exclude-tag database includes tests tagged "fast" but excludes those tagged "database", matching the requirement.
  3. Step 3: Identify incorrect syntax in other options

    Options B and D misuse --tags or --exclude-tags flags; --include-tag database --exclude-tag fast reverses include/exclude logic.
  4. Final Answer:

    --include-tag fast --exclude-tag database -> Option A
  5. Quick Check:

    Include and exclude tags use separate options [OK]
Hint: Use separate include and exclude tag options [OK]
Common Mistakes:
  • Combining tags with commas in --tags option
  • Using wrong flag names like --exclude-tags
  • Reversing include and exclude logic
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