Bird
Raised Fist0
JUnittesting~8 mins

Verification times (times, never, atLeast) in JUnit - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Verification times (times, never, atLeast)
Folder Structure
src/
└── test/
    └── java/
        └── com/
            └── example/
                ├── pages/
                │   └── LoginPage.java
                ├── tests/
                │   └── LoginTest.java
                ├── utils/
                │   └── VerificationUtils.java
                └── config/
                    └── TestConfig.java
    
Test Framework Layers
  • Driver Layer: Manages WebDriver setup and teardown for browser control.
  • Page Objects: Encapsulate UI elements and actions (e.g., LoginPage.java).
  • Tests: Contain JUnit test classes with test methods using verification times.
  • Utilities: Helper classes like VerificationUtils for reusable verification methods.
  • Configuration: Holds environment settings, browser options, and credentials.
Configuration Patterns

Use TestConfig.java to manage environment variables and browser settings.

Example:

public class TestConfig {
    public static final String BASE_URL = System.getProperty("baseUrl", "https://example.com");
    public static final String BROWSER = System.getProperty("browser", "chrome");
    public static final String USERNAME = System.getProperty("username", "testuser");
    public static final String PASSWORD = System.getProperty("password", "password123");
}
    

Pass these properties via command line or CI environment variables for flexibility.

Test Reporting and CI/CD Integration
  • Use JUnit's built-in reports or integrate with tools like Surefire plugin for Maven.
  • Generate HTML reports with plugins like Allure for better visualization.
  • Integrate tests in CI/CD pipelines (e.g., Jenkins, GitHub Actions) to run on each commit.
  • Fail tests if verification times conditions (times, never, atLeast) are not met.
Best Practices for Verification Times in JUnit
  1. Use Verification Times Explicitly: Clearly specify how many times a method should be called using times(n), never(), or atLeast(n) to avoid flaky tests.
  2. Keep Verifications Close to Actions: Verify interactions immediately after the action to improve readability and debugging.
  3. Use Mocks and Spies Properly: Use Mockito mocks/spies to track method calls for verification times.
  4. Fail Fast on Verification Errors: Let tests fail immediately if verification times do not match expectations to catch issues early.
  5. Document Verification Intent: Comment why a certain number of calls is expected to help future maintainers.
Self Check

Where in this folder structure would you add a new verification method to check that a button click happens at least twice?

Key Result
Use explicit verification times (times, never, atLeast) in JUnit tests with Mockito to ensure correct method call counts.

Practice

(1/5)
1. Which Mockito verification method checks that a method was called exactly 3 times?
easy
A. verify(mock, atMost(3)).method()
B. verify(mock, never()).method()
C. verify(mock, atLeast(3)).method()
D. verify(mock, times(3)).method()

Solution

  1. Step 1: Understand times(n) usage

    The times(n) method verifies that the method was called exactly n times.
  2. Step 2: Match the exact call count

    Since the question asks for exactly 3 calls, times(3) is the correct choice.
  3. Final Answer:

    verify(mock, times(3)).method() -> Option D
  4. Quick Check:

    Exact call count = times(n) [OK]
Hint: Use times(n) for exact call count verification [OK]
Common Mistakes:
  • Confusing times(n) with atLeast(n)
  • Using never() when calls exist
  • Using atMost(n) instead of times(n)
2. Which of the following is the correct syntax to verify that a method was never called using Mockito?
easy
A. verify(mock, never()).method();
B. verify(mock, atLeast(0)).method();
C. verify(mock, times(0));
D. verify(mock).never().method();

Solution

  1. Step 1: Identify the correct method for zero calls

    Mockito provides never() to verify that a method was not called at all.
  2. Step 2: Check syntax correctness

    The correct syntax is verify(mock, never()).method();. Using times(0) also works but never() is clearer and preferred.
  3. Final Answer:

    verify(mock, never()).method(); -> Option A
  4. Quick Check:

    No calls = never() [OK]
Hint: Use never() to verify zero calls clearly [OK]
Common Mistakes:
  • Using times(0) instead of never() for clarity
  • Incorrect chaining like verify(mock).never()
  • Using atLeast(0) which always passes
3. Given the following code snippet:
verify(mock, atLeast(2)).process();

Which statement is true about the verification?
medium
A. The method process() must be called exactly 2 times.
B. The method process() must be called at most 2 times.
C. The method process() must be called at least 2 times or more.
D. The method process() must never be called.

Solution

  1. Step 1: Understand atLeast(n) meaning

    The atLeast(n) method verifies that the method was called at least n times, meaning 2 or more times.
  2. Step 2: Match the verification condition

    Since the code uses atLeast(2), it means the method must be called 2 or more times, not exactly 2.
  3. Final Answer:

    The method process() must be called at least 2 times or more. -> Option C
  4. Quick Check:

    Minimum calls = atLeast(n) [OK]
Hint: atLeast(n) means minimum n calls, not exact [OK]
Common Mistakes:
  • Confusing atLeast(n) with times(n)
  • Thinking atLeast(n) means at most n
  • Assuming never() means zero calls only
4. Identify the error in this Mockito verification:
verify(mock, never).execute();
medium
A. Using times() instead of never()
B. Missing parentheses after never()
C. Incorrect method name execute()
D. No error, syntax is correct

Solution

  1. Step 1: Check syntax of never()

    The never() method requires parentheses to be called as a method.
  2. Step 2: Identify missing parentheses

    The code uses never without parentheses, which is a syntax error.
  3. Final Answer:

    Missing parentheses after never() -> Option B
  4. Quick Check:

    never() requires parentheses [OK]
Hint: Always add () after never to avoid syntax errors [OK]
Common Mistakes:
  • Omitting parentheses after never
  • Confusing never with times(0)
  • Assuming method name causes error
5. You want to verify that a method update() was called at least once but no more than 5 times. Which Mockito verification code correctly expresses this?
hard
A. verify(mock, atLeast(1)).update(); verify(mock, atMost(5)).update();
B. verify(mock, times(1)).update(); verify(mock, times(5)).update();
C. verify(mock, never()).update();
D. verify(mock, atLeast(5)).update();

Solution

  1. Step 1: Understand the requirement

    The method update() must be called at least once and at most 5 times.
  2. Step 2: Use correct verification methods

    Use atLeast(1) to check minimum calls and atMost(5) to check maximum calls.
  3. Step 3: Combine verifications

    Both verifications must be done separately to ensure the call count is between 1 and 5.
  4. Final Answer:

    verify(mock, atLeast(1)).update(); verify(mock, atMost(5)).update(); -> Option A
  5. Quick Check:

    Range check = atLeast + atMost [OK]
Hint: Combine atLeast(n) and atMost(m) for call count range [OK]
Common Mistakes:
  • Using times() twice with different values
  • Using never() when calls exist
  • Using only atLeast(5) which ignores max limit
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