Bird
Raised Fist0
JUnittesting~10 mins

Object Mother pattern in JUnit - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a default User object using the Object Mother pattern.

JUnit
User user = UserMother.[1]();
Drag options to blanks, or click blank then click option'
AgetDefaultUser
BcreateDefaultUser
CmakeUser
DbuildUser
Attempts:
3 left
💡 Hint
Common Mistakes
Using method names that do not follow Object Mother naming conventions.
Confusing factory methods with Object Mother methods.
2fill in blank
medium

Complete the code to assert that the User object created by the Object Mother has the expected default name.

JUnit
assertEquals("John Doe", user.[1]());
Drag options to blanks, or click blank then click option'
AgetId
BgetEmail
CgetName
DgetUsername
Attempts:
3 left
💡 Hint
Common Mistakes
Using getId() or getEmail() which do not return the name.
Using incorrect method names that cause compilation errors.
3fill in blank
hard

Fix the error in the Object Mother method that creates a User with a custom email.

JUnit
public static User createUserWithEmail(String email) {
    return new User("John Doe", [1]);
}
Drag options to blanks, or click blank then click option'
A"email"
Bemail
CgetEmail()
DuserEmail
Attempts:
3 left
💡 Hint
Common Mistakes
Passing the string "email" instead of the variable.
Using undefined variables like userEmail.
Calling methods that do not exist in this context.
4fill in blank
hard

Fill both blanks to create a User with a custom name and default email using the Object Mother pattern.

JUnit
public static User [1](String name) {
    return new User(name, [2]);
}
Drag options to blanks, or click blank then click option'
AcreateUserWithName
B"default@example.com"
CgetDefaultEmail()
DcreateDefaultUser
Attempts:
3 left
💡 Hint
Common Mistakes
Using method names that do not match the purpose.
Passing method calls instead of string literals for the email.
5fill in blank
hard

Fill all three blanks to create a map of User names to their emails for users with names longer than 5 characters.

JUnit
Map<String, String> userMap = users.stream()
    .filter(user -> user.getName().length() [1] 5)
    .collect(Collectors.toMap(
        user -> user.[2](),
        user -> user.[3]()
    ));
Drag options to blanks, or click blank then click option'
A>
BgetName
CgetEmail
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using < instead of > in the filter.
Swapping getName() and getEmail() in the map.
Using incorrect method names causing compilation errors.

Practice

(1/5)
1. What is the main purpose of the Object Mother pattern in JUnit testing?
easy
A. To generate random test data dynamically
B. To create reusable test objects to reduce setup code
C. To mock external services during tests
D. To organize test cases into groups

Solution

  1. Step 1: Understand Object Mother role

    The Object Mother pattern provides ready-made objects for tests to avoid repeating setup code.
  2. Step 2: Compare with other options

    Mocking services or grouping tests are different patterns; Object Mother focuses on reusable test objects.
  3. Final Answer:

    To create reusable test objects to reduce setup code -> Option B
  4. Quick Check:

    Object Mother = reusable test objects [OK]
Hint: Object Mother = reusable test objects for simpler tests [OK]
Common Mistakes:
  • Confusing Object Mother with mocking frameworks
  • Thinking it generates random data automatically
  • Believing it organizes test suites
2. Which of the following is the correct way to define an Object Mother method in JUnit for a User object?
easy
A. public User createUser() { return new User("Alice", 30); }
B. User createUser() { return new User("Alice", 30); }
C. public static User createUser() { return new User("Alice", 30); }
D. static User createUser() { return new User("Alice", 30); }

Solution

  1. Step 1: Check method signature for Object Mother

    Object Mother methods are usually public static so tests can call them without creating an instance.
  2. Step 2: Validate return type and body

    The method returns a new User object with fixed data, matching the pattern.
  3. Final Answer:

    public static User createUser() { return new User("Alice", 30); } -> Option C
  4. Quick Check:

    Object Mother methods are public static [OK]
Hint: Object Mother methods are public static for easy reuse [OK]
Common Mistakes:
  • Omitting static keyword
  • Using non-public access modifier
  • Missing return type
3. Given this Object Mother method:
public static Order createOrder() {
    return new Order("123", 5, 100.0);
}

What will be the output of this test?
@Test
void testOrderTotal() {
    Order order = ObjectMother.createOrder();
    assertEquals(500.0, order.getTotal());
}
medium
A. Test passes because total is 500.0
B. Test fails because total is 100.0
C. Test fails due to NullPointerException
D. Test fails because order ID is incorrect

Solution

  1. Step 1: Calculate expected total from Object Mother data

    Order has quantity 5 and price 100.0, so total = 5 * 100.0 = 500.0.
  2. Step 2: Check assertion in test

    The test asserts total equals 500.0, which matches the calculated total.
  3. Final Answer:

    Test passes because total is 500.0 -> Option A
  4. Quick Check:

    Quantity * Price = Total = 500.0 [OK]
Hint: Multiply quantity and price to find total [OK]
Common Mistakes:
  • Assuming total is price only
  • Ignoring quantity in calculation
  • Expecting NullPointerException without cause
4. Identify the error in this Object Mother method:
public static Product createProduct() {
    Product p = new Product();
    p.setName("Laptop");
    return p;
    p.setPrice(1200);
}
medium
A. Code after return statement is unreachable
B. Missing static keyword in method
C. Product constructor requires parameters
D. Method should return void

Solution

  1. Step 1: Analyze method flow

    The return p; line ends the method, so code after it is unreachable.
  2. Step 2: Identify unreachable code

    The line p.setPrice(1200); after return will never run, causing a compile warning or error.
  3. Final Answer:

    Code after return statement is unreachable -> Option A
  4. Quick Check:

    Code after return is unreachable [OK]
Hint: No code runs after return statement [OK]
Common Mistakes:
  • Ignoring unreachable code warnings
  • Assuming method can run code after return
  • Confusing method return type
5. You have multiple tests needing different User objects: one active, one inactive, and one admin. How should you design your Object Mother class to best support this?
hard
A. Use a mocking framework instead of Object Mother
B. Create one method createUser(String type) with if-else inside
C. Create User objects directly in each test without Object Mother
D. Create separate static methods: activeUser(), inactiveUser(), adminUser()

Solution

  1. Step 1: Understand Object Mother best practice

    Separate static methods for each test object type keep tests clear and Object Mother simple.
  2. Step 2: Compare alternatives

    Using one method with if-else adds complexity; creating objects in tests repeats code; mocking is different purpose.
  3. Final Answer:

    Create separate static methods: activeUser(), inactiveUser(), adminUser() -> Option D
  4. Quick Check:

    Separate methods = clear reusable objects [OK]
Hint: Use separate methods for each test object type [OK]
Common Mistakes:
  • Overloading one method with many conditions
  • Not using Object Mother and repeating code
  • Confusing mocking with object creation
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