Bird
Raised Fist0
Selenium Javatesting~20 mins

TestNG annotations (@Test, @BeforeMethod, @AfterMethod) in Selenium Java - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
TestNG Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of TestNG method execution order
Consider the following TestNG test class. What will be the order of printed output when the tests run?
Selenium Java
import org.testng.annotations.*;

public class SampleTest {

  @BeforeMethod
  public void setup() {
    System.out.println("Setup");
  }

  @Test
  public void testA() {
    System.out.println("Test A");
  }

  @Test
  public void testB() {
    System.out.println("Test B");
  }

  @AfterMethod
  public void teardown() {
    System.out.println("Teardown");
  }
}
A2,1,3,5,4,6
B1,3,2,4,6,5
C1,2,3,4,5,6
D2,3,1,5,6,4
Attempts:
2 left
💡 Hint
Remember that @BeforeMethod and @AfterMethod run before and after each @Test method.
❓ assertion
intermediate
1:30remaining
Correct assertion to verify setup execution
You want to verify that the setup method annotated with @BeforeMethod runs before each test. Which assertion correctly checks that the setup flag is set before the test runs?
Selenium Java
import org.testng.Assert;
import org.testng.annotations.*;

public class SetupTest {
  private boolean setupDone = false;

  @BeforeMethod
  public void setup() {
    setupDone = true;
  }

  @Test
  public void testCheckSetup() {
    // Which assertion below is correct here?
  }
}
AAssert.assertEquals(setupDone, false);
BAssert.assertFalse(setupDone);
CAssert.assertNull(setupDone);
DAssert.assertTrue(setupDone);
Attempts:
2 left
💡 Hint
The setupDone flag is set to true in @BeforeMethod before the test runs.
🔧 Debug
advanced
2:00remaining
Identify why @AfterMethod is not running
Given the following TestNG test class, why is the teardown method annotated with @AfterMethod never executed?
Selenium Java
import org.testng.annotations.*;

public class DebugTest {

  @BeforeMethod
  public void setup() {
    System.out.println("Setup");
  }

  @Test
  public void testSomething() {
    System.out.println("Test");
    throw new RuntimeException("Fail");
  }

  @AfterMethod
  public void teardown() {
    System.out.println("Teardown");
  }
}
AThe @AfterMethod method always runs even if the test fails, so the problem is elsewhere.
BThe @AfterMethod method must be static to run after tests.
CThe @AfterMethod method is not running because the test method is failing.
DBecause the test throws an exception, @AfterMethod is skipped.
Attempts:
2 left
💡 Hint
Check TestNG behavior when tests throw exceptions.
🧠 Conceptual
advanced
1:00remaining
Purpose of @BeforeMethod and @AfterMethod in TestNG
Which statement best describes the purpose of @BeforeMethod and @AfterMethod annotations in TestNG?
A@BeforeMethod runs before each test method; @AfterMethod runs after each test method.
B@BeforeMethod runs once before all tests; @AfterMethod runs once after all tests.
C@BeforeMethod and @AfterMethod run only if the test passes.
D@BeforeMethod and @AfterMethod are used to group tests into suites.
Attempts:
2 left
💡 Hint
Think about setup and cleanup for each test method.
❓ framework
expert
2:00remaining
TestNG behavior with multiple @BeforeMethod methods
If a TestNG test class has two methods annotated with @BeforeMethod, how does TestNG execute them before each test method?
ATestNG runs both @BeforeMethod methods in the order they appear in the class before each test.
BTestNG runs both @BeforeMethod methods but the order is not guaranteed before each test.
CTestNG throws a runtime error if multiple @BeforeMethod methods exist.
DTestNG runs only one @BeforeMethod method chosen at random before each test.
Attempts:
2 left
💡 Hint
Consider TestNG's handling of multiple configuration methods of the same type.

Practice

(1/5)
1. What is the main purpose of the @BeforeMethod annotation in TestNG?
easy
A. To run a method before each test method to set up the test environment
B. To mark a method as a test case
C. To run a method after all test methods have finished
D. To skip a test method during execution

Solution

  1. Step 1: Understand the role of @BeforeMethod

    This annotation is used to run a method before each test method to prepare or set up the environment.
  2. Step 2: Differentiate from other annotations

    @Test marks test methods, @AfterMethod runs after each test, and skipping tests uses other annotations.
  3. Final Answer:

    To run a method before each test method to set up the test environment -> Option A
  4. Quick Check:

    @BeforeMethod = setup before each test [OK]
Hint: BeforeMethod always runs before each test method [OK]
Common Mistakes:
  • Confusing @BeforeMethod with @BeforeClass
  • Thinking @BeforeMethod runs only once
  • Mixing @BeforeMethod with @AfterMethod
2. Which of the following is the correct syntax to mark a method as a test case in TestNG?
easy
A. @BeforeMethod void testMethod() {}
B. @Test void testMethod() {}
C. @AfterMethod void testMethod() {}
D. test void testMethod() {}

Solution

  1. Step 1: Identify the annotation for test methods

    @Test is the correct annotation to mark a method as a test case in TestNG.
  2. Step 2: Check syntax correctness

    The method signature with @Test void testMethod() {} is valid Java and TestNG syntax.
  3. Final Answer:

    @Test void testMethod() {} -> Option B
  4. Quick Check:

    @Test marks test methods [OK]
Hint: Use @Test to mark test methods in TestNG [OK]
Common Mistakes:
  • Using @BeforeMethod or @AfterMethod instead of @Test
  • Missing parentheses in method declaration
  • Writing 'test' instead of '@Test'
3. Consider the following TestNG class:
public class SampleTest {
  @BeforeMethod
  public void setup() {
    System.out.println("Setup");
  }

  @Test
  public void test1() {
    System.out.println("Test1");
  }

  @Test
  public void test2() {
    System.out.println("Test2");
  }

  @AfterMethod
  public void cleanup() {
    System.out.println("Cleanup");
  }
}
What will be the order of printed lines when this test class runs?
medium
A. Test1 Test2 Setup Cleanup
B. Setup Cleanup Test1 Setup Cleanup Test2
C. Setup Test1 Test2 Cleanup
D. Setup Test1 Cleanup Setup Test2 Cleanup

Solution

  1. Step 1: Understand TestNG execution flow

    For each @Test method, @BeforeMethod runs before it and @AfterMethod runs after it.
  2. Step 2: Trace the print statements

    First test: Setup -> Test1 -> Cleanup. Second test: Setup -> Test2 -> Cleanup.
  3. Final Answer:

    Setup Test1 Cleanup Setup Test2 Cleanup -> Option D
  4. Quick Check:

    BeforeMethod and AfterMethod wrap each test [OK]
Hint: BeforeMethod and AfterMethod run around each test [OK]
Common Mistakes:
  • Assuming BeforeMethod runs once before all tests
  • Assuming AfterMethod runs once after all tests
  • Mixing order of print statements
4. Identify the error in the following TestNG code snippet:
public class TestExample {
  @BeforeMethod
  public void setup() {
    System.out.println("Setup");
  }

  @Test
  public void testMethod() {
    System.out.println("Test");
  }

  @AfterMethod
  public void cleanup() {
    System.out.println("Cleanup")
  }
}
medium
A. Missing semicolon after System.out.println("Cleanup")
B. Incorrect annotation @AfterMethod should be @AfterTest
C. setup() method should be static
D. testMethod() must return boolean

Solution

  1. Step 1: Check syntax in cleanup() method

    The line System.out.println("Cleanup") is missing a semicolon at the end.
  2. Step 2: Verify other parts

    Annotations are correct, methods do not need to be static, and test methods can be void.
  3. Final Answer:

    Missing semicolon after System.out.println("Cleanup") -> Option A
  4. Quick Check:

    Java statements must end with semicolon [OK]
Hint: Check for missing semicolons in Java code [OK]
Common Mistakes:
  • Confusing @AfterMethod with @AfterTest
  • Thinking test methods must return boolean
  • Assuming setup() must be static
5. You want to run a setup method once before all tests in a TestNG class and a cleanup method after each test method. Which annotations should you use for these methods?
hard
A. @BeforeMethod for setup, @AfterMethod for cleanup
B. @BeforeMethod for setup, @AfterClass for cleanup
C. @BeforeClass for setup, @AfterMethod for cleanup
D. @BeforeTest for setup, @AfterTest for cleanup

Solution

  1. Step 1: Identify annotation to run once before all tests

    @BeforeClass runs once before any test methods in the class.
  2. Step 2: Identify annotation to run after each test method

    @AfterMethod runs after each test method to clean up.
  3. Final Answer:

    @BeforeClass for setup, @AfterMethod for cleanup -> Option C
  4. Quick Check:

    BeforeClass = once before all, AfterMethod = after each test [OK]
Hint: Use BeforeClass once, AfterMethod after each test [OK]
Common Mistakes:
  • Using BeforeMethod for setup once only
  • Using AfterClass for cleanup after each test
  • Confusing BeforeTest with BeforeClass
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