Bird
Raised Fist0
JUnittesting~8 mins

@Test annotation in JUnit - Framework Patterns

Choose your learning style10 modes available
Framework Mode - @Test annotation
Folder Structure
project-root/
├── src/
│   ├── main/
│   │   └── java/
│   │       └── com/example/app/
│   │           └── App.java
│   └── test/
│       └── java/
│           └── com/example/app/
│               ├── pages/
│               │   └── LoginPage.java
│               ├── tests/
│               │   └── LoginTest.java
│               ├── utils/
│               │   └── TestUtils.java
│               └── config/
│                   └── TestConfig.java
├── pom.xml
└── README.md
    
Test Framework Layers
  • Test Classes: Contain test methods annotated with @Test. Example: LoginTest.java holds tests for login features.
  • Page Objects: Represent UI pages with methods to interact with elements. Example: LoginPage.java encapsulates login page actions.
  • Utilities: Helper methods for common tasks like waits, data generation, or assertions. Example: TestUtils.java.
  • Configuration: Manage environment settings, browser setup, and credentials. Example: TestConfig.java.
  • Build & Dependency Management: Managed by pom.xml using Maven for JUnit and Selenium dependencies.
Configuration Patterns

Use a dedicated config class or properties file to handle:

  • Environments: Define URLs for dev, test, and prod environments. Switch via system properties or profiles.
  • Browser Setup: Configure browser type (Chrome, Firefox) in TestConfig.java or via Maven profiles.
  • Credentials: Store securely using environment variables or encrypted files, accessed in tests via config utilities.
  • Timeouts & Waits: Centralize wait times and retry logic in utility classes.
Test Reporting and CI/CD Integration
  • JUnit generates XML reports by default, which CI tools like Jenkins or GitHub Actions can consume.
  • Use plugins like Surefire or Failsafe in Maven to run tests and generate reports.
  • Integrate with CI/CD pipelines to run tests automatically on code push or pull requests.
  • Use additional reporting tools like Allure for rich, user-friendly test reports.
Best Practices for @Test Annotation Framework
  • One Assertion per Test: Keep tests focused on a single behavior for clear pass/fail results.
  • Descriptive Test Names: Name test methods clearly to describe what they verify, e.g., loginWithValidCredentials_shouldSucceed().
  • Use Setup and Teardown: Use @BeforeEach and @AfterEach to prepare and clean test state.
  • Isolate Tests: Ensure tests do not depend on each other to avoid flaky results.
  • Use Assertions Properly: Use JUnit assertions like assertEquals, assertTrue to validate expected outcomes.
Self Check

Where in this folder structure would you add a new test method that verifies the logout functionality?

Key Result
Use @Test annotation in JUnit test classes under src/test/java to define executable test methods following clear structure and best practices.

Practice

(1/5)
1. What is the main purpose of the @Test annotation in JUnit?
easy
A. To mark a method as a test case that JUnit will run
B. To declare a method as private
C. To specify the return type of a method
D. To import JUnit libraries

Solution

  1. Step 1: Understand the role of @Test

    The @Test annotation tells JUnit which methods are test cases to execute.
  2. Step 2: Eliminate unrelated options

    Options B, C, and D do not relate to marking test methods.
  3. Final Answer:

    To mark a method as a test case that JUnit will run -> Option A
  4. Quick Check:

    @Test marks test methods [OK]
Hint: Remember: @Test means 'run this method as test' [OK]
Common Mistakes:
  • Thinking @Test changes method visibility
  • Confusing @Test with import statements
  • Assuming @Test sets return type
2. Which of the following is the correct syntax for a JUnit test method using @Test?
easy
A. public void testMethod(int x) {}
B. private int testMethod() {}
C. public void testMethod() {}
D. public String testMethod() {}

Solution

  1. Step 1: Recall JUnit test method rules

    Test methods must be public, return void, and take no parameters.
  2. Step 2: Check each option

    public void testMethod() {} matches all rules. Options B, C, and D violate visibility, return type, or parameters.
  3. Final Answer:

    public void testMethod() {} -> Option C
  4. Quick Check:

    Public, void, no params = correct test method [OK]
Hint: Test methods: public + void + no parameters [OK]
Common Mistakes:
  • Making test methods private
  • Adding parameters to test methods
  • Using non-void return types
3. Given the code below, what will be the test result when running with JUnit?
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;

public class SampleTest {
    @Test
    public void checkSum() {
        int result = 2 + 3;
        assertEquals(5, result);
    }
}
medium
A. Runtime exception thrown
B. Test passes successfully
C. Compilation error due to missing return
D. Test fails with assertion error

Solution

  1. Step 1: Analyze the test method logic

    The method calculates 2 + 3 and stores in result, then asserts result equals 5.
  2. Step 2: Check assertion correctness

    Since 2 + 3 is 5, the assertion assertEquals(5, result) will pass.
  3. Final Answer:

    Test passes successfully -> Option B
  4. Quick Check:

    2 + 3 = 5, assertion true [OK]
Hint: If assertion matches calculation, test passes [OK]
Common Mistakes:
  • Assuming test fails without checking assertion
  • Confusing compilation errors with test failures
  • Ignoring that test methods return void
4. Identify the error in the following JUnit test method:
import org.junit.jupiter.api.Test;

public class ErrorTest {
    @Test
    private void testHidden() {
        // test code
    }
}
medium
A. Test method must be public, not private
B. Missing return statement in test method
C. Test method should have parameters
D. Missing @BeforeEach annotation

Solution

  1. Step 1: Check method visibility

    JUnit requires test methods to be public so it can access and run them.
  2. Step 2: Validate other method properties

    Test methods must be void and parameterless; private visibility is the error here.
  3. Final Answer:

    Test method must be public, not private -> Option A
  4. Quick Check:

    Test methods must be public [OK]
Hint: Test methods must be public, not private [OK]
Common Mistakes:
  • Making test methods private
  • Adding parameters to test methods
  • Confusing lifecycle annotations with test method requirements
5. You want to write a JUnit test method that checks if a method throws an exception. Which is the correct way to use @Test for this purpose in JUnit 5?
hard
A. Use @Test(expected = Exception.class) annotation parameter
B. Add throws Exception to the test method signature
C. Write a try-catch block without @Test
D. Use @Test with assertThrows() inside the method

Solution

  1. Step 1: Recall JUnit 5 exception testing

    JUnit 5 uses assertThrows() inside @Test methods to check exceptions.
  2. Step 2: Eliminate outdated or incorrect options

    Use @Test(expected = Exception.class) annotation parameter is from JUnit 4 and invalid in JUnit 5. Add throws Exception to the test method signature only declares exception, not tests it. Write a try-catch block without @Test misses @Test.
  3. Final Answer:

    Use @Test with assertThrows() inside the method -> Option D
  4. Quick Check:

    JUnit 5 uses assertThrows() inside @Test [OK]
Hint: JUnit 5 tests exceptions with assertThrows() inside @Test [OK]
Common Mistakes:
  • Using JUnit 4 style @Test(expected=) in JUnit 5
  • Only declaring throws without assertion
  • Not using @Test annotation
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